Как упаковать chromedriver.exe на Mac - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь использовать Selenium в приложении Electron и использую следующие модули:

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

Я собрал свое приложение на Mac, и Selenium работает нормально. Однако, когда я запускаю приложение Electron Selenium в Widows, он не может найти chromedriver.

react-electron/node_modules/chromedriver ниже.

enter image description here

Конечно, у него нет chromedriver.exe, поэтому я положил chromedriver.exe в chromedriver/bin. Затем я построил его снова, но встроенное приложение не включает chromedriver.exe. Как мне упаковать chromedriver.exe во встроенное приложение?

Я обращаюсь к вам за помощью.

1 Ответ

0 голосов
/ 01 ноября 2019

Я нашел решение. Я поместил 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();
    }

Надеюсь, это кому-нибудь поможет.

...