Ubuntu 22.04下Python可通过Selenium控制Firefox,JS为何报错?
解决Selenium Node.js版控制Firefox时的“binary is not a Firefox executable”错误
问题根源
Ubuntu 22.04默认通过snap包安装Firefox,而Selenium Manager会优先自动下载并使用缓存中的Firefox二进制文件,直接忽略你手动指定的路径,导致路径不匹配触发错误。
解决方案
1. 确认Firefox实际可执行路径
- Snap版Firefox:实际二进制路径为
/snap/firefox/current/usr/lib/firefox/firefox(/usr/bin/firefox只是snap的链接文件,并非实际可执行程序) - 手动下载版Firefox:找到解压目录下的
firefox可执行文件(比如/home/xxx/Downloads/firefox/firefox)
2. 修正Node.js代码
禁用Selenium Manager的自动浏览器下载功能,强制使用你指定的Firefox二进制路径:
const { Builder, By, Key, until } = require('selenium-webdriver'); const firefox = require('selenium-webdriver/firefox'); const process = require('process'); // 禁用Selenium Manager自动下载浏览器 process.env.SELENIUM_MANAGER_SKIP_BROWSER_DOWNLOAD = 'true'; (async function example() { // 替换为你的Firefox实际可执行路径 const firefoxOptions = new firefox.Options().setBinary('/snap/firefox/current/usr/lib/firefox/firefox'); const driver = await new Builder() .forBrowser('firefox') .setFirefoxOptions(firefoxOptions) .build(); try { await driver.get('https://dev.to'); const searchInput = await driver.findElement(By.className('crayons-header--search-input')); await searchInput.sendKeys('Selenium', Key.RETURN); await driver.wait(until.titleIs('Search Results - DEV Community'), 10000); } finally { await driver.quit(); } })();
3. 备选启动方式
也可以在启动脚本时直接设置环境变量,无需修改代码:
SELENIUM_MANAGER_SKIP_BROWSER_DOWNLOAD=true node your_script.js
额外排查点
- 验证指定路径的可执行性:运行
/path/to/firefox确认Firefox能正常启动 - 检查文件权限:确保当前用户对Firefox可执行文件有运行权限
内容的提问来源于stack exchange,提问作者sumofchemicals
相关产品推荐
相关产品推荐

