node.js complaining that "The ChromeDriver could not be found on the current PATH" even though chromedriver is on the path

时间:2016-04-04 18:35:49

标签: linux node.js path selenium-chromedriver

I’m using node 5.10.0 on Linux. Having some issues running my script, which are displayed below

[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)

It is saying chromedriver isn’t on my path, but I just downloaded the appropriate version from here — http://chromedriver.storage.googleapis.com/index.html?path=2.9/ , and as you can see, it is on my PATH

[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

with the following permissions …

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

So I am confused as to why I’m getting this error. Any help is appreciated, - Dave

5 个答案:

答案 0 :(得分:3)

我有同样的问题。我已经通过从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

答案 1 :(得分:2)

添加到Niels&#39;回答,对于那些不使用巴别

的人
  1. 首先使用npm安装chromedrive软件包。如果全局安装,请确保在路径中包含节点包
  2. npm install -g chromedriver
    

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

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

答案 2 :(得分:0)

在我的小型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. 然后在terminal文件夹中打开~/Downloads
  7. 然后USER@DESKTOP:~/Downloads$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads,您将在chromedriver文件夹中获得原始~/Downloads文件。
  8. 现在我将ChromeDriver 73.0.3683.68文件移动到了系统中的两个位置-usr/local/binusr/bin
  9. chromedriver中已经有一个usr/local/bin文件。
  10. 移动文件-USER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/local/bin/chromedriverUSER@DESKTOP:~/Downloads$ sudo mv -f ~/Downloads/chromedriver /usr/bin/chromedriver表示要将文件chromedriver从第一个位置移动到其他位置,这意味着用相同的名称替换这些位置中已经存在的所有文件。 / p>

  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');

答案 3 :(得分:0)

可能会晚一点,但是如果有人遇到这个问题,我可以进行以下工作:

第一个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

答案 4 :(得分:0)

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

  1. 运行npm install
  2. 在您的节点脚本中,在致电Webdriver之前,请在行require('chromedriver');(我在selenium-webdriver中使用它)

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

相关问题