Selenium Nodejs CHROMEDRIVER path

在 selenium 的使用中,遇到过 使用 npm install selenium-webdriver 安装了 webdriver 驱动,但是仍找不到驱动的情况。错误信息如下:

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 (<anonymous>)
    at new ServiceBuilder (/var/www/nodejs/node_modules/selenium-webdriver/chrome.js:51:11)
    at getDefaultService (/var/www/nodejs/node_modules/selenium-webdriver/chrome.js:216:22)
    at new Driver (/var/www/nodejs/node_modules/selenium-webdriver/chrome.js:470:32)
    at Builder.build (/var/www/nodejs/node_modules/selenium-webdriver/builder.js:302:14)
    at Object.handle (/var/www/nodejs/node.js:31:4)
    at next_layer (/var/www/nodejs/node_modules/express/lib/router/route.js:103:13)
    at Route.dispatch (/var/www/nodejs/node_modules/express/lib/router/route.js:107:5)
    at c (/var/www/nodejs/node_modules/express/lib/router/index.js:195:24)
    at Function.proto.process_params (/var/www/nodejs/node_modules/express/lib/router/index.js:251:12)

在Windows环境下,网上有说通过将 ChromeDriver 所在路径配置到系统环境变量中。这种方式我没试过,可能不太方便,因为开发的客户端可能要安装到多个电脑上,配置环境变量的方式就有点麻烦了。

于是,找到了一种可以配置 chromedriver 路径的使用方式。

// 点击按钮,打开系统
var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    Key = webdriver.Key,
    until = webdriver.until;
var chrome = require("selenium-webdriver/chrome");
var fs= require("fs");

var options = new chrome.Options();
options.addArguments("--start-maximized"); // 启动就最大化,而不是像后面再使用 maximize() 那样之后再最大化
options.addArguments("--disable-popup-blocking");
options.addArguments("no-sandbox");
options.addArguments("disable-extensions");
options.addArguments("no-default-browser-check");

if(chrome.getDefaultService() == null) {
    var service;        

    // exe 安装之后在根目录找到chromedriver.exe
    if(fs.existsSync(path.join(__dirname, '../../chromedriver.exe'))) {
        console.log(path.join(__dirname, '../../chromedriver.exe'));
        service = new chrome.ServiceBuilder(path.join(__dirname, '../../chromedriver.exe')).build();            
    }

    // 开发过程中寻找 chromedriver
    if(fs.existsSync(path.join(__dirname, './chromedriver.exe'))) {
        console.log(path.join(__dirname, './chromedriver.exe'));
        service = new chrome.ServiceBuilder(path.join(__dirname, './chromedriver.exe')).build();
    }

    chrome.setDefaultService(service);    
}

driver = new webdriver.Builder()
    .setChromeOptions(options)
    .withCapabilities(webdriver.Capabilities.chrome())
    .forBrowser('chrome')
    .build();

这里通过 chrome.ServiceBuilder 的方式指定了 chromedriver 的路径。需要注意的是,我是在 electron 中使用的 chromedriver,chromedriver 放在 main.js 同一目录,开发过程中使用 ‘./chromedriver.exe’ 就可以了(nodejs 中 __dirname 指的 main.js 所在的目录)。打包之后,main.js 在 resources\app.asar 里,而 chromedriver 与 resources 目录在同一目录下,所以需要使用 ‘…/…/chromedriver.exe’ 来获取chromedriver。

本文参考:Selenium Nodejs CHROMEDRIVER path

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值