Selenium无头模式下如何配置使系统PPTP VPN正常生效访问站点
问题根因
旧版Chrome无头模式的实现逻辑存在天然局限:使用--headless参数启动的是独立维护的轻量渲染实例,未复用GUI模式的完整系统网络栈,无法识别PPTP VPN写入系统路由表的转发规则,流量默认从物理网卡直接发出,因此无法访问仅VPN可达的内网站点。GUI模式下Chrome完全调用系统网络层能力,所以VPN可正常生效。
可行解决方案
优先方案:切换到新版Chrome无头模式(推荐,99%场景可直接解决问题)
Chrome 112及以上版本推出了和GUI模式完全同源的新无头实现,该模式和正常打开的Chrome共用完全一致的渲染逻辑、网络栈、系统集成能力,会自动识别系统级VPN的路由规则,不需要额外调整VPN配置。
你只需要替换原有无头启动参数即可,参考配置:
from selenium.webdriver.chrome.options import Options chrome_options = Options() # 替换旧的--headless参数,启用新版无头模式 chrome_options.add_argument("--headless=new") # 建议固定窗口大小,避免无头模式下页面渲染尺寸和GUI模式存在差异 chrome_options.add_argument("--window-size=1920,1080")
该方案不需要修改现有测试逻辑,也不需要调整系统VPN配置,是落地成本最低的解决方式。
兜底方案:旧版Chrome兼容配置
如果你因为环境限制无法升级Chrome到112以上版本,可以通过关闭网络服务沙箱的参数,强制无头模式的网络进程读取系统路由表,该配置存在一定兼容性问题,仅作为无法升级Chrome版本时的兜底选项:
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") # 关闭网络进程沙箱,允许读取系统路由规则适配PPTP VPN chrome_options.add_argument("--disable-features=NetworkServiceSandbox") chrome_options.add_argument("--window-size=1920,1080")
避坑提示
- 不要在启动参数中额外添加
--proxy-server配置,该参数会覆盖系统路由规则,导致VPN流量被转发到指定代理,无法正常访问内网 - 正式跑测试用例前,可先访问内网的IP查询接口,确认出口IP为VPN分配的内网段地址后再执行后续逻辑,提前排查路由异常
内容的提问来源于stack exchange,提问作者mahsa nemati
相关产品推荐
相关产品推荐

