MacOS Big Sur下NodeJS配合Selenium调用Brave浏览器报错如何解决?
问题排查与解决方案
核心问题原因
- Selenium 官方内置的
forBrowser()方法仅支持 chrome、firefox、safari、edge 等通用浏览器标识,未内置 Brave 浏览器的适配逻辑,直接传入brave、chromium标识都会触发驱动构建失败的报错。 - 传入
chrome标识后浏览器停留在data:,空白页,是因为 ChromeDriver 默认会查找系统安装的 Chrome 浏览器可执行文件,未指定 Brave 路径的情况下无法正确关联到 Brave 程序。
修复方案
修改你的 index.js 代码,通过 ChromeOptions 手动指定 Brave 浏览器的可执行文件路径即可,MacOS 下 Brave 的默认安装路径为 /Applications/Brave Browser.app/Contents/MacOS/Brave Browser,修改后代码如下:
const { Builder, By, Key, until } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); (async function example() { // 配置Chrome选项,指定Brave的可执行文件路径 let options = new chrome.Options(); options.setChromeBinaryPath('/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'); // 构建驱动时传入配置好的options let driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); try { await driver.get('http://www.google.com/'); await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN); await driver.wait(until.titleIs('webdriver - Google Search'), 1000); } finally { await driver.quit(); } })();
额外注意事项
- 你当前使用的 ChromeDriver 92 版本和 Brave 内置的 Chromium 92 大版本匹配,无需更换驱动版本。
- 不需要手动提前启动 chromedriver 进程,Selenium NodeJS 依赖会自动拉起对应驱动,手动启动反而可能出现端口占用冲突。
- 如果你的 Brave 安装在非默认路径,可在终端执行
mdfind "kMDItemFSName == 'Brave Browser'"查找对应可执行文件的实际路径,替换代码中的路径即可。
内容的提问来源于stack exchange,提问作者Dycey
相关产品推荐
相关产品推荐

