如何在UC模式下跨多脚本复用SeleniumBase Driver实例?
跨脚本复用SeleniumBase UC模式Chrome实例的方案
核心思路
复用已有Chrome实例的关键是利用Chrome的远程调试端口:启动浏览器时指定固定端口,后续脚本通过该端口直接连接到已运行的浏览器进程,而非新建实例。
步骤1:修改启动脚本,开启远程调试
启动浏览器时添加远程调试端口配置,同时固定user_data_dir确保配置文件一致。修改后的启动脚本如下:
from seleniumbase import Driver from time import sleep my_user_dir = "C:/ProgramData/Midbots/User Data/Chrome Data" url = "https://www.midddleman.co/" def launch_driver(): # 配置Chrome远程调试端口 chrome_options = { "remote_debugging_port": 9222, "user_data_dir": my_user_dir, } # 启动UC模式浏览器,传入自定义配置 driver = Driver(uc=True, headless=None, disable_gpu=True, chrome_options=chrome_options) driver.uc_open_with_reconnect(url, 5) driver.uc_gui_click_captcha() sleep(5) return driver if __name__ == "__main__": driver = launch_driver() # 阻塞脚本,避免浏览器随脚本结束自动关闭 input("按下回车键关闭浏览器...") driver.quit()
步骤2:编写复用实例的脚本
在另一个脚本中,通过指定远程调试端口连接已启动的浏览器,无需重新初始化新实例:
from seleniumbase import Driver def reuse_driver(): # 连接到已启动的远程调试端口 driver = Driver(uc=True, headless=None, remote_debugging_port=9222) # 直接操作已有页面,示例为跳转新页面 driver.get("https://www.example.com") print("当前页面标题:", driver.title) # 不要调用quit(),避免关闭共享实例 return driver if __name__ == "__main__": driver = reuse_driver() input("按下回车键结束操作...")
关键注意事项
- 端口唯一性:确保
remote_debugging_port(如9222)未被其他进程占用,可更换为其他空闲端口。 - user_data_dir一致性:两个脚本的
user_data_dir路径必须完全相同,否则会启动新的浏览器配置实例。 - 保持启动脚本运行:启动脚本需通过
input()或其他方式阻塞,否则浏览器会随脚本终止而关闭。 - 并发操作同步:多个复用脚本同时操作时,需注意避免元素操作冲突。
最佳实践
- 长期复用场景下,可将启动脚本做成守护进程,防止终端关闭导致浏览器退出。
- 定期清理
user_data_dir中的缓存文件,避免因缓存堆积引发实例异常。
内容的提问来源于stack exchange,提问作者Donald Ekpe
相关产品推荐
相关产品推荐

