【问题标题】:node.js complaining that "The ChromeDriver could not be found on the current PATH" even though chromedriver is on the pathnode.js 抱怨“在当前路径上找不到 ChromeDriver”,即使 chromedriver 在路径上
【发布时间】:2025-12-20 06:35:04
【问题描述】:

我在 Linux 上使用节点 5.10.0。运行我的脚本时遇到一些问题,如下所示

[davea@mydevbox mydir]$ node SkyNet.js 
Validation Complete
/home/davea/node_modules/selenium-webdriver/chrome.js:185
      throw Error(
      ^

Error: The ChromeDriver could not be found on the current PATH. Please download the latest version of the ChromeDriver from http://chromedriver.storage.googleapis.com/index.html and   ensure it can be found on your PATH.
    at Error (native)
    at new ServiceBuilder (/home/davea/node_modules/selenium-webdriver/chrome.js:185:13)
    at getDefaultService (/home/davea/node_modules/selenium-webdriver/chrome.js:362:22)
    at Driver (/home/davea/node_modules/selenium-webdriver/chrome.js:771:34)
    at Builder.build (/home/davea/node_modules/selenium-webdriver/builder.js:464:16)
    at Object.<anonymous> (/home/davea/mydir/js/Optimus.js:14:4)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)

这是说 chromedriver 不在我的路径上,但我刚刚从这里下载了适当的版本 - http://chromedriver.storage.googleapis.com/index.html?path=2.9/,正如你所见,它在我的路径上

[davea@mydevbox mydir]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/davea/bin:/home/davea/bin:/usr/lib/chromedriver

具有以下权限……

[davea@mydevbox mydir]$ ls -al /usr/lib/chromedriver
-rwxr-xr-x 1 davea evotext 5503600 Feb  3  2014 /usr/lib/chromedriver

所以我很困惑为什么我会收到这个错误。任何帮助表示赞赏, - 戴夫

【问题讨论】:

    标签: linux node.js path selenium-chromedriver


    【解决方案1】:

    为不使用 Babel 的人补充 Niels 的答案

    1. 首先使用 npm 安装 chromedrive 包。如果您全局安装,请确保您的路径中有节点包
    npm install -g chromedriver
    

    如果 PATH 错误仍然存​​在,只需将其保存到本地项目的依赖项中

    npm install --save-dev chromedriver
    
    1. 对于那些不使用 Babel 的人
    const webdriver = require('selenium-webdriver');
    const chrome = require('selenium-webdriver/chrome');
    const chromedriver = require('chromedriver');
    
    chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());
    

    【讨论】:

    • 这行得通,谢谢。这些应该是const 而不是let。此外,您可能希望在设置完成后包含可用驱动程序的实例化。
    • 是的,下载驱动程序并提供 $PATH 是不够的。我不得不使用 npm install -g chromedriver
    【解决方案2】:

    我有同样的问题。我已经通过 chromedriver 包中的路径解决了它。

    这是我的代码:

    import webdriver from 'selenium-webdriver';
    import chrome from 'selenium-webdriver/chrome';
    import chromedriver from 'chromedriver';
    
    chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());
    
    var driver = new webdriver.Builder()
                     .withCapabilities(webdriver.Capabilities.chrome())
                     .build();
    

    基于此答案的代码:Passing require('chromedriver).path directly to selenium-webdriver

    【讨论】:

    • 这很好,但它需要 babel 和 transpiling 的知识。我只想指出,所有import varariableName from 'package-name' 都可以是:const variableName = require('package-name'); 最简单的形式。
    【解决方案3】:

    可能有点晚了,但如果有人为我遇到此问题,请执行以下操作:

    第一个npm install -g chromedriver --save

    然后在你的代码require('chromedriver');上面添加这一行

    这是一个演示:

    require('chromedriver');
    var webdriver = require('selenium-webdriver');
    var driver = new webdriver.Builder()
      .forBrowser('chrome')
      .build();
    driver.get('https://google.com');
    

    更多详情可以去这里:https://www.npmjs.com/package/chromedriver

    【讨论】:

    • 在我们的代码顶部添加这个是什么意思?我没有任何代码,我有一个 .side 文件。这段代码去哪儿了?
    • 它使用的是nodejs,所以它需要是一个js文件。添加到您的 e2e 测试的顶部,例如VisitGoogle.jsdriver.get('https://google.com'); 是告诉 chrome 驱动程序访问 google.com 的示例。有关更多详细信息,您需要阅读文档
    【解决方案4】:

    对于我的小selenium-webdriver 测试,我在网上和这里研究后做了这些步骤:

    1. npm install selenium-webdriver
    2. npm install chromedriver
    3. npm install geckodriver 并打开文件 library.js 和 npm init 并运行 node library.js (以下源代码)
    4. Error: (node:14212) UnhandledPromiseRejectionWarning: NoSuchSessionError: invalid session id 一些与不同的 chromedriver 版本相关的长错误。所以我在浏览器中手动检查了 chrome 浏览器版本。是version 73,我下载的错误是chromedriver version 74.0
    5. 所以根据你的操作系统去https://chromedriver.storage.googleapis.com/index.html?path=73.0.3683.68/下载,然后在~/Downloads下载。
    6. 然后在~/Downloads 文件夹中打开terminal
    7. 然后USER@DESKTOP:~/Downloads$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads 您将在~/Downloads 文件夹中获得原始的chromedriver 文件。
    8. 现在我将ChromeDriver 73.0.3683.68 文件移动到了两个位置——系统中的usr/local/binusr/bin
    9. usr/local/bin 中已经有一个chromedriver 文件。
    10. 移动文件 - USER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/local/bin/chromedriverUSER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/bin/chromedriver 您说要将文件 chromedriver 从第一个位置移动到其他位置,这意味着替换这些位置中已有的同名文件。

    11. 我最后所做的就是。关闭 vscode 并重新启动它。并运行我的代码 node library.js 。它为我工作了 chrome 浏览器。

    源代码:LIBRARY.JS

    var webdriver = require('selenium-webdriver');
    
    var By = webdriver.By;
    
    var until = webdriver.until;
    
    var driver = new webdriver.Builder().forBrowser('chrome').build();
    
    driver.get('https://www.google.com');
    

    【讨论】:

      【解决方案5】:

      对我来说最简单的方法是使用本地安装的 chromedriver。当我忘记在脚本中使用 chromedriver 时出现错误。

      1. 运行npm install
      2. 在你的节点脚本中有require('chromedriver');在你调用一个webdriver之前(我用它和selenium-webdriver一起使用)

      不确定为什么它没有检测到您的全局路径。如果我没有 require('chromedriver') 行,我可以将本地 chromedriver 文件添加到路径中,它可以工作。

      【讨论】:

        【解决方案6】:

        由于 Jenkins windows slave 造成了很多混乱

        所以这里是你可以解决它的方法

        点击此链接并根据您的 chrome 版本下载兼容的驱动程序 -

        https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/

        下载驱动程序后,将其放在 c:\ 驱动器中的某个位置,例如 c:\chromedriver

        将该路径添加到您的 System 环境变量 - 参考在此处https://www.browserstack.com/guide/run-selenium-tests-using-selenium-chromedriver

        完成后请注意确保重启您的 Windows 机器,否则 Jenkins 将无法找到它

        另一个调试技巧 - 我最初使用 npm 全局安装它,并将 C:\Users\some_windows_user\AppData\Roaming\npm\node_modules 添加到系统环境变量并重新启动我的机器。这在 CI 中从未奏效。

        就像我上面说的,将它移动到 c:\chromedriver 并添加到系统环境变量中,然后 100% 重启你的机器

        【讨论】:

          最近更新 更多