Selenium Standalone Server搭配WebdriverIO需永久联网问题求助
解决Selenium Standalone + WebdriverIO每次启动都下载chromedriver的问题
我之前也碰到过一模一样的糟心事!先给你拆解下背后的原因,再分享几个亲测有效的解决办法:
为什么每次启动都要重新下载?
Selenium Standalone Server默认的逻辑是:启动时会自动检查本地有没有和当前Chrome浏览器版本完全匹配的chromedriver。如果找不到匹配版本,或者它没检测到本地已有的驱动文件,就会尝试从谷歌的存储服务器(就是你报错里的chromedriver.storage.googleapis.com)下载对应版本的驱动。而且默认情况下,它不会缓存下载好的驱动——这就导致每次启动都要重复检测+下载的流程,断网时自然因为连不上服务器而启动失败。
实用解决办法
1. 手动下载驱动并指定路径
- 第一步:找到和你本地Chrome版本完全匹配的chromedriver(比如Chrome是118.x,就找对应118版本的驱动)
- 第二步:把下载好的chromedriver放到项目内的固定目录,比如
./drivers/chromedriver.exe - 第三步:启动Selenium时通过参数指定驱动路径:
如果你用WebdriverIO的java -Dwebdriver.chrome.driver=./drivers/chromedriver.exe -jar selenium-server-standalone-x.x.x.jarwdio-selenium-standalone-service,可以在wdio.conf.js里配置启动参数:services: [ ['selenium-standalone', { args: { 'webdriver.chrome.driver': './drivers/chromedriver.exe' } }] ]
2. 使用selenium-standalone npm包缓存驱动
这个工具专门解决Selenium驱动的缓存问题,比直接用官方jar包省心太多:
- 全局安装工具:
npm install selenium-standalone -g - 先执行安装命令,把需要的驱动下载并缓存到本地:
selenium-standalone install - 之后启动Selenium就用这个命令,即使断网也能正常启动——因为驱动已经存在本地缓存里了:
搭配WebdriverIO使用时,也能通过selenium-standalone startwdio-selenium-standalone-service配置调用这个工具,不用每次手动启动。
3. 检查WebdriverIO的自动更新配置
有些情况下,WebdriverIO的服务配置可能会强制开启驱动自动更新,你可以在wdio.conf.js里检查seleniumInstallArgs,如果有--force这类强制更新的参数,去掉它就能避免每次重新下载。
关于你遇到的报错
你看到的getaddrinfo ENOTFOUND就是断网后DNS解析失败,连不上谷歌驱动存储服务器导致的。只要用上上面的方法让Selenium调用本地驱动,这个报错就会彻底消失。
内容的提问来源于stack exchange,提问作者Ewgenij Sokolovski
相关产品推荐
相关产品推荐

