Рейтинг:0

Как передать путь chromedriver к nodejs selenium-webdriver в Docker

флаг us
Jay

Вот мой файл докера.

ОТ узла: 17.2.0

ПОЛЬЗОВАТЕЛЬ root

РАБОЧИЙКАТАЛОГ /LT

RUN apt-получить обновление
  
RUN apt-get install git --yes

КОПИРОВАТЬ/ЛТ.
КОПИРОВАТЬ /LT/тест .
КОПИРОВАТЬ ["/LT/package.json", "."]

# Установите Google Chrome
ВЫПОЛНИТЬ apt-получить установку wget
ЗАПУСК wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
ЗАПУСК apt-get install ./google-chrome*.deb --yes

ENV CHROME_BIN=/usr/bin/google-chrome

ЗАПУСТИТЬ установку npm
ЗАПУСК npm ci
ЗАПУСТИТЬ npm установить nodejs
ЗАПУСК npm установить мокко -g
ЗАПУСК npm установить chromedriver -g --unsafe-perm
ЗАПУСК npm установить selenium-webdriver
ЗАПУСТИТЬ npm установить webdriver-manager
#ЗАПУСТИТЬ обновление webdriver-manager
CMD ["узел", "./test/script1.js"]

Ниже приведен мой файл javascript nodejs, который использует хром для запуска приложения и входа в систему.

требуют("хромдрайвер");
const {By,Key,Builder} = require("selenium-webdriver");
const chrome = require('selenium-webdriver/chrome');

 
асинхронная функция getAuthCode(){ 

        постоянный URL = "https://abcd.com";
        
       //Чтобы дождаться, пока браузер соберется и запустится должным образом
        пусть драйвер = ждите нового Builder()
            .forBrowser("хром")
            .setChromeOptions (новый chrome.Options (). Без головы ()) 
            
            //.setChromeOptions(new chrome.Options().addArguments(['--no-sandbox','-headless', '--disable-dev-shm-usage']))           
        
            .строить();
        
        ждать driver.get(url);
        console.log(драйвер);
        const wait = ms => new Promise (разрешить => setTimeout (разрешить, мс));
        ждать ждать(1 ​​* 20 * 1000);
        await driver.manage().window().setRect({ ширина: 1552, высота: 840 });
        await driver.findElement(By.id("emailInput")).click();
        await driver.findElement(By.id("emailInput")).sendKeys("[email protected]");
        
        await driver.findElement(By.id("кнопка отправки")).click();
        
        
        
        ждать ждать(1 ​​* 20 * 1000);
       
        
        ждать driver.quit();
        
        вернуть «некоторые данные»;

}
 
асинхронная функция testAuthCode()
{
    var cCode = ожидание getAuthCode();
    console.log(cCode);
}
код проверки подлинности();

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

WebDriverError: неизвестная ошибка: не удалось запустить Chrome: аварийное завершение работы.
-узлы-1 | (неизвестная ошибка: файл DevToolsActivePort не существует)
-узлы-1 | (Процесс, запущенный из папки chrome /usr/bin/google-chrome, больше не работает, поэтому ChromeDriver предполагает, что Chrome потерпел крах.)
-узлы-1 | в Object.throwDecodedError (/LT/node_modules/selenium-webdriver/lib/error.js:539:15)

Я знаю причину: он не может найти chromedriver по пути по умолчанию «/usr/bin/google-chrome».

Либо

  1. Мне нужно установить хром в заданное по умолчанию местоположение Или же
  2. укажите путь к тому месту, где фактически установлен хром.

В любом случае, как мне это сделать в JavaScript или докере?

PS: Сценарий отлично работает в моей локальной среде Windows.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.