Chrome WebDriver+Selenium连接VPN后DevTools断开问题求助
问题描述
在使用Selenium搭配Chrome WebDriver时,连接VPN后调用driver.get()出现disconnected: not connected to DevTools错误。必须在连接VPN前启动WebDriver,VPN连接前加载网页正常,调整ChromeOptions后问题仍存在。
代码示例
import subprocess import time from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("--start-maximized") driver = webdriver.Chrome( options=options ) subprocess.Popen( 'rasdial "jp-free-09.protonvpn.net"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) print('Connected to VPN.') time.sleep(10) driver.get('https://stackoverflow.com/') driver.quit() print('Completed.')
报错信息
Traceback (most recent call last): File "c:\Users\****\****\****\****\****.py", line 23, in <module> driver.get('https://stackoverflow.com/') File "C:\Users\****\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 355, in get self.execute(Command.GET, {"url": url}) File "C:\Users\****\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 346, in execute self.error_handler.check_response(response) File "C:\Users\****\AppData\Local\Programs\Python\Python311\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: disconnected: not connected to DevTools (failed to check if window was closed: disconnected: not connected to DevTools) (Session info: chrome=115.0.5790.102) Stacktrace: Backtrace: GetHandleVerifier [0x00A5A813+48355] (No symbol) [0x009EC4B1] (No symbol) [0x008F5358] (No symbol) [0x008E7D96] (No symbol) [0x008E7AB9] (No symbol) [0x008F67C0] (No symbol) [0x0094C4D8] (No symbol) [0x0093A536] (No symbol) [0x009182DC] (No symbol) [0x009193DD] GetHandleVerifier [0x00CBAABD+2539405] GetHandleVerifier [0x00CFA78F+2800735] GetHandleVerifier [0x00CF456C+2775612] GetHandleVerifier [0x00AE51E0+616112] (No symbol) [0x009F5F8C] (No symbol) [0x009F2328] (No symbol) [0x009F240B] (No symbol) [0x009E4FF7] BaseThreadInitThunk [0x779200C9+25] RtlGetAppContainerNamedObjectPath [0x77C87B1E+286] RtlGetAppContainerNamedObjectPath [0x77C87AEE+238]
环境信息
- Python: 3.11.4
- selenium: 4.10.0
- webdriver-manager: 3.8.6
- Chrome: 115.0.5790.102(ChromeDriver版本匹配)
解决思路与方案
固定DevTools调试端口:VPN切换网络后,Chrome的DevTools连接易因网络环境变化中断。启动Chrome时指定固定调试端口,确保WebDriver能维持连接:
options.add_argument("--remote-debugging-port=9222")也可先启动Chrome实例,再通过
debugger_address连接:# 先启动Chrome subprocess.Popen([ "chrome.exe", "--remote-debugging-port=9222", "--start-maximized" ]) time.sleep(3) # 连接到已启动的Chrome driver = webdriver.Chrome(options=options)禁用网络安全限制:VPN可能触发Chrome的网络安全策略,导致渲染进程与DevTools断开,添加以下参数:
options.add_argument("--disable-web-security") options.add_argument("--allow-running-insecure-content")验证VPN连接状态:
time.sleep(10)无法确保VPN完全生效,建议通过ping目标地址或访问测试URL的方式,确认网络连通后再执行driver.get()。重启Chrome进程(备选):若业务场景允许,VPN连接成功后关闭原Chrome实例,重新启动WebDriver:
driver = webdriver.Chrome(options=options) # 连接VPN逻辑 subprocess.Popen('rasdial "jp-free-09.protonvpn.net"', ...) time.sleep(10) # 重启驱动 driver.quit() driver = webdriver.Chrome(options=options) driver.get('https://stackoverflow.com/')尝试无头模式:无头模式下网络切换的兼容性可能更稳定,添加参数:
options.add_argument("--headless=new")
内容的提问来源于stack exchange,提问作者Y-404
相关产品推荐
相关产品推荐

