Nano Hash - криптовалюты, майнинг, программирование

Передача require ('chromedriver) .path напрямую в selenium-webdriver

tl; dr: Кто-нибудь знает, как передать путь chromedriver к selenium-webdriver в коде без установки переменной среды PATH?

Я пытаюсь использовать selenium-webdriver с хромом, но предпочел бы физически не устанавливать chromedriver и не манипулировать путем. У меня такой код:

var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

Если в пути не указан хромированный драйвер, возникает ошибка:

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.

Я бы предпочел не настраивать свой путь, поэтому я установил chromedriver из npm и добавил в свой package.json:

"scripts": {
    "preinstall-chromedriver": "npm install",
    "install-chromedriver": "node node_modules/chromedriver/install.js",
    "pretest_e2e": "npm run install-chromedriver",
    "test_e2e": "node release/test/rune2e.js"
},

Теперь у меня установлен chromedriver, и я могу получить путь с помощью require('chromedriver').path, но у меня нет возможности передать это selenium-webdriver. Кто-нибудь знает?


Ответы:


1

Вам необходимо создать и установить собственную службу Chrome по умолчанию.

var webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');
var path = require('chromedriver').path;

var service = new chrome.ServiceBuilder(path).build();
chrome.setDefaultService(service);

var driver = new webdriver.Builder()
    .withCapabilities(webdriver.Capabilities.chrome())
    .build();
01.01.2015
  • Я новичок в node.js, есть ли ошибка во второй строке, поскольку внутри selenium-webdriver нет хрома, тогда вы тоже пишете `var chrome = require ('selenium-webdriver / chrome');`. После всего этого я все еще получаю сообщение об ошибке SyntaxError: Error parsing /home/abc/node_modules/selenium-webdriver/package.json: Unexpected token / 24.01.2015
  • require ('selenium-webdriver / chrome') означает загрузку файла chrome.js внутри установки npm selenium-webdriver. Это должно работать нормально. Однако я думаю, что у вас может быть поврежденный файл package.json (вы не должны видеть ошибку синтаксического анализа из неразрешенной ссылки). Вы вносили какие-либо изменения в этот файл? 26.01.2015
  • да, изменения, которые вы предложили внести в package.json 26.01.2015
  • Это должно быть в файле package.json вашего пакета. Не в selenium-webdriver / package.json, как указано в SyntaxError. 26.01.2015
  • Я получаю эту ошибку. Сервер преждевременно завершен со статусом 0. 08.11.2018

  • 2

    Вы также можете сделать это:

    require('chromedriver');
    const webdriver = require('selenium-webdriver');
    
    const driver = new webdriver.Builder()
        .withCapabilities(webdriver.Capabilities.chrome())
        .build();
    
    11.04.2015
  • Это очень просто, мне это нравится! Однако вместо ';' следует использовать path.delimiter. 22.10.2016
  • Это решает исходный вопрос? Похоже, вы только что встроили переменную webdriver из моего ответа выше. Может я недопонимаю ... 19.09.2017
  • Идея здесь в том, что вам не нужно создавать сервис. Хитрость здесь в том, что require('chromedriver'); добавит путь хромированной драйвера к process.env.PATH. По этой причине selenium-webdriver сможет запустить chromedriver, если будет запрошен драйвер с возможностями crome. 23.09.2017

  • 3
  • Спасибо, вариант 1 может работать, но в варианте 2 используется переменная среды PATH, о которой в вопросе конкретно говорится, что она не хочет устанавливать. 09.03.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..