Selenium WebDriver部署Mac后Chrome无法运行问题求助
解决Mac部署后
spawn ENOTDIR错误的方案 我来帮你搞定这个问题!这个错误通常是因为部署后chromedriver的路径解析出错,程序尝试去执行一个目录而非可执行的二进制文件,或者环境里的依赖版本/权限有问题。下面是一步步的排查和解决方法:
1. 先确认版本匹配问题
Mac上安装的Chrome版本,必须和你安装的chromedriver版本严格对应(大版本一致即可)。你可以:
- 打开Chrome,在「设置→关于Chrome」查看浏览器版本
- 在Mac终端执行
chromedriver --version查看驱动版本
如果版本不匹配,卸载现有chromedriver,重新安装对应版本:
npm uninstall chromedriver --save npm install chromedriver@<对应版本号> --save
2. 避免动态路径解析,手动指定chromedriver绝对路径
你之前用require('chromedriver').path获取路径,在本地开发环境没问题,但部署后(尤其是用打包工具时)这个路径可能会指向错误的目录。改成手动指定Mac上chromedriver的实际位置:
const webDriver = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); // 替换成你部署后chromedriver的实际绝对路径,比如/usr/local/bin/chromedriver const chromedriverPath = '/usr/local/bin/chromedriver'; const service = new chrome.ServiceBuilder(chromedriverPath).build(); chrome.setDefaultService(service); // 注意:你之前的代码里build()前面漏了个点,要补上! const driver = new webDriver.Builder() .withCapabilities(webDriver.Capabilities.chrome()) .build(); driver.get('https://www.google.com');
3. 检查chromedriver的可执行权限
部署到Mac后,chromedriver二进制文件可能丢失了可执行权限,执行下面的命令修复:
chmod +x /path/to/your/chromedriver
4. 改用selenium-webdriver的自动驱动管理
如果手动指定路径太麻烦,可以让selenium自动管理chromedriver,避免路径问题:
const { Builder } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); // 用异步函数写法更规范,避免回调地狱 (async function runTest() { let driver; try { driver = await new Builder() .forBrowser('chrome') // 如果需要无头模式(后台运行),可以添加这个选项 .setChromeOptions(new chrome.Options().headless()) .build(); await driver.get('https://www.google.com'); // 这里可以添加你的测试逻辑 } catch (err) { console.error('运行出错:', err); } finally { if (driver) await driver.quit(); } })();
5. 排查具体的路径错误
如果还是不行,可以在代码里打印出当前获取的chromedriver路径,看看是不是指向了目录而非文件:
console.log('当前chromedriver路径:', require('chromedriver').path);
部署后运行程序,查看这个路径是否是一个实际存在的二进制文件,如果是目录,那就是路径解析的问题,需要调整你的部署配置(比如打包工具的资源包含规则)。
内容的提问来源于stack exchange,提问作者MGames
相关产品推荐
相关产品推荐

