Puncte:0

Cum să transmiteți calea chromedriver către nodejs selenium-webdriver în Docker

drapel us
Jay

Aici este fișierul meu Docker.

DIN nodul:17.2.0

rădăcină UTILIZATOR

WORKDIR /LT

RUN apt-get update
  
RUN apt-get install git --yes

COPIE /LT .
COPIE /LT/test .
COPIEAZĂ ["/LT/package.json", "."]

# Instalați Google Chrome
RUN apt-get install wget
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get install ./google-chrome*.deb --yes

ENV CHROME_BIN=/usr/bin/google-chrome

RUN instalarea npm
RUN npm ci
RUN npm install nodejs
RUN npm install mocha -g
RUN npm install chromedriver -g --unsafe-perm
RUN npm instalează selenium-webdriver
RUN npm install webdriver-manager
#RUN actualizare webdriver-manager
CMD [„nod”, „./test/script1.js”]

Urmează fișierul meu javascript nodejs care folosește Chrome pentru a lansa aplicația și a se autentifica.

require("chromedriver");
const {By,Key,Builder} = require("selenium-webdriver");
const chrome = require('selenium-webdriver/chrome');

 
funcția asincronă getAuthCode(){ 

        const url = "https://abcd.com";
        
       //Pentru a aștepta ca browserul să se creeze și să se lanseze corect
        lasă driverul = așteaptă noul Builder()
            .forBrowser(„chrome”)
            .setChromeOptions(new chrome.Options().headless()) 
            
            //.setChromeOptions(new chrome.Options().addArguments(['--no-sandbox','-headless', '--disable-dev-shm-usage']))           
        
            .construi();
        
        așteaptă driver.get(url);
        console.log(driver);
        const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
        așteptați așteptați (1 * 20 * 1000);
        așteaptă driver.manage().window().setRect({ lățime: 1552, înălțime: 840});
        așteaptă driver.findElement(By.id("emailInput")).click();
        await driver.findElement(By.id("emailInput")).sendKeys("[email protected]");
        
        await driver.findElement(By.id("submitbutton")).click();
        
        
        
        așteptați așteptați (1 * 20 * 1000);
       
        
        așteaptă driver.quit();
        
        returnează „unele date”;

}
 
funcția asincronă testAuthCode()
{
    var cCode = await getAuthCode();
    console.log(cCode);
}
testAuthCode();

Când rulez fișierul meu de scriere docker folosind același fișier docker care este prezentat mai sus, primesc următoarea eroare.

WebDriverError: eroare necunoscută: Chrome nu a pornit: ieșit anormal.
-nodejs-1 | (eroare necunoscută: fișierul DevToolsActivePort nu există)
-nodejs-1 | (Procesul început din locația Chrome /usr/bin/google-chrome nu mai rulează, așa că ChromeDriver presupune că Chrome s-a blocat.)
-nodejs-1 | la Object.throwDecodedError (/LT/node_modules/selenium-webdriver/lib/error.js:539:15)

Știu motivul, nu poate găsi chromedriver-ul la calea implicită „/usr/bin/google-chrome”.

Fie

  1. Trebuie să instalez Chrome în locația implicită dată Sau
  2. dați calea locației în care este instalat de fapt Chrome.

În ambele cazuri, cum o fac în JavaScript sau în docker?

PS: Scriptul rulează perfect în mediul meu local Windows.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.