You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 17:46:03