Selenium Chrome Driver使用headless选项时触发异常
解决Chrome无头模式下意外退出+端口泄漏的问题
我之前调试无头Chrome的时候也碰到过一模一样的情况,大概率是扩展程序和无头模式的兼容性冲突导致的,给你几个实用的排查和解决步骤:
先做排除法,确认是不是扩展的问题:
暂时注释掉加载扩展的代码options.addExtensions(new File("C://temp//1.14.12_0.crx"));,重新运行程序。如果不再崩溃,那百分百是这个扩展和无头模式不兼容。若必须使用该扩展,尝试这些适配操作:
- 把Chrome浏览器升级到最新稳定版,同时检查扩展的版本是否适配当前Chrome版本;
- 改用新版无头模式参数,替代旧的
headless:options.addArguments("--headless=new"); // 新版无头模式对扩展的兼容性更好
补充必要的无头模式启动参数,避免环境异常:
有些环境下只加headless会因为资源或权限问题崩溃,建议加上这些参数:options.addArguments("--disable-gpu"); // 无头模式下无需GPU加速 options.addArguments("--no-sandbox"); // 禁用沙箱,解决部分环境下的权限问题 options.addArguments("--disable-dev-shm-usage"); // 避免/dev/shm内存不足导致崩溃关于端口泄漏的问题:
这个一般是Chrome意外退出后没有正常释放端口导致的,不用手动指定固定端口的话,Chrome默认会自动选择可用端口,重启程序后通常就能解决;如果还是有问题,可以手动清理占用对应端口的进程后再启动。
简单说下原因:无头模式下Chrome的运行环境和带界面的模式差异很大,很多老扩展依赖界面相关的API(比如弹窗、DOM交互类的功能),无头模式下这些API无法正常工作,就会触发进程崩溃,连带出现端口泄漏的提示。
内容的提问来源于stack exchange,提问作者dushkin
相关产品推荐
相关产品推荐

