Python webdriver调用chrome,关闭程序后,不关闭浏览器

你希望在多次运行 Python 脚本时复用同一个已经打开的 Chrome 浏览器实例,而不是每次都重新启动一个新的浏览器。这在自动化测试或调试中很常见。

然而,Selenium / undetected-chromedriver(uc)本身并不支持“连接到已存在的浏览器”这一功能,因为 WebDriver 协议要求每个会话由一个独立的浏览器实例管理。不过,有几种变通方法可以实现你的目标:

✅ 推荐方案:使用 远程调试模式(Remote Debugging)

这是最接近你需求的方法:第一次启动带调试端口的 Chrome,后续脚本连接到这个已存在的浏览器实例。

步骤如下:

1️⃣ 第一次手动启动 Chrome(带远程调试)

在命令行中启动 Chrome,并开启远程调试端口(例如 9222):

Windows 示例
"C:Program FilesGoogleChromeApplicationchrome.exe" --remote-debugging-port=9222 --user-data-dir="C:/temp/chrome_debug"

macOS 示例
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --remote-debugging.port=9222 --user-data-dir="/tmp/chrome_debug"

Linux 示例
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome_debug

⚠️ --user-data-dir 必须指定,否则可能无法启动多个实例或权限出错。

此时 Chrome 会以“可被控制”的方式打开,保持运行。

2️⃣ 在 Python 脚本中连接到这个已有浏览器

修改你的代码,不再创建新浏览器,而是连接到已存在的调试端口:

import undetected_chromedriver as uc

chrome_options = uc.ChromeOptions()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

注意:不需要 driver_executable_path 和 browser_executable_path
driver = uc.Chrome(options=chrome_options)

现在你可以操作已打开的浏览器
driver.get("https://www.example.com")

✅ 这样每次运行脚本,都会复用同一个 Chrome 窗口,不会重新打开。

3️⃣ 后续运行脚本

只要那个带 --remote-debugging-port=9222 的 Chrome 没关闭,你就可以无限次运行你的 Python 脚本,它们都会连接到同一个浏览器实例。

🔁 补充说明

  • 如果你希望完全自动化(即第一次也由脚本启动),可以写一个“主控脚本”:
    • 检查是否有 Chrome 在 9222 端口运行;
    • 如果没有,就用 subprocess 启动它;
    • 然后再连接。
  • 关闭浏览器后,下次运行需重新启动带调试模式的 Chrome。
  • 使用 undetected-chromedriver 时,连接已有浏览器依然能保留其“反检测”特性(因为是同一个进程)。

❌ 不可行的方法(常见误区)

  • 保存 driver 对象到文件再加载? → 不行,WebDriver 实例不能序列化。
  • 用 Selenium Grid? → 仍需每个 session 新建浏览器,不解决复用问题。
  • 共享 session 文件? → 可以保留登录状态,但浏览器进程仍会重启。

✅ 总结

要实现“只开一次浏览器,多次运行脚本复用”,唯一可靠方法是:
启动带 --remote-debugging-port 的 Chrome + Python 脚本通过 debuggerAddress 连接它。

如果你需要,我可以帮你写一个完整的“自动启动+连接”脚本模板。是否需要?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容