首页 > 解决方案 > 如何在 Mac 上打包 chromedriver.exe

问题描述

我正在尝试在 Electron 应用程序上使用 Selenium,并且正在使用以下模块:

"chromedriver": "^78.0.1",
"selenium-webdriver": "^4.0.0-alpha.4",
"electron-builder": "^21.2.0",

我在 Mac 上构建了我的应用程序,Selenium 运行良好。但是,当我在寡妇上运行 Electron Selenium 应用程序时,它找不到chromedriver.

react-electron/node_modules/chromedriver在下面。

在此处输入图像描述

当然它没有chromedriver.exe,所以我chromedriver.exe放入chromedriver/bin。然后我再次构建它,但构建的应用程序不包含chromedriver.exe. 如何打包chromedriver.exe到构建的应用程序中?

我申请你的帮助。

标签: seleniumelectronselenium-chromedriver

解决方案


我找到了解决方案。我将 chromedriver.exe 放入node_modules/chromedriver/lib/chromedriver.

我可以检查它是否被复制 win-unpacked/resources/app.asar.unpacked/node_modules/chromedriver/lib/chromedriver/chromedriver.exe

当应用程序运行时,chromedriver 可以在C:\Users\user\AppData\Local\Programs\MyApp\resources\app.asar.unpacked\node_modules\chromedriver\lib\chromedriver\chromedriver.exe

我可以像这样获得驱动程序路径。

const chromedriver = require('chromedriver');

async getDriverPath() {
    let driverPath:string = this.chromedriver.path;
    driverPath = await driverPath.replace('app.asar','app.asar.unpacked');
    log.info("this.driverPath " + driverPath);
    return driverPath;
}

而且,我设置了这样的驱动程序路径。

const webdriver = require('selenium-webdriver');
const {Builder} = webdriver;
let my_driver;

async startChrome() {
        const driverPath = await this.getDriverPath();
        const service = new chrome.ServiceBuilder(driverPath).build();
        chrome.setDefaultService(service);
        my_driver = new Builder().forBrowser('chrome').build();
    }

我希望这会对某人有所帮助。


推荐阅读