Điểm:0

Cách chuyển đường dẫn chromedriver tới nodejs selen-webdriver trong Docker

lá cờ us
Jay

Đây là tập tin docker của tôi.

TỪ nút:17.2.0

NGƯỜI DÙNG gốc

WORKDIR /LT

CHẠY bản cập nhật apt-get
  
CHẠY cài đặt apt-get git --yes

SAO CHÉP /LT .
SAO CHÉP /LT/kiểm tra .
SAO CHÉP ["/LT/package.json", "."]

# Cài đặt Google Chrome
CHẠY apt-get cài đặt wget
CHẠY wget https://dl.google.com/linux/direct/google-chrome-stable_current_AMD64.deb
CHẠY cài đặt apt-get ./google-chrome*.deb --yes

ENV CHROME_BIN=/usr/bin/google-chrome

CHẠY cài đặt npm
CHẠY npm ci
CHẠY npm cài đặt nodejs
CHẠY npm cài đặt mocha -g
CHẠY npm install chromedriver -g --unsafe-perm
CHẠY npm cài đặt Selenium-webdriver
CHẠY npm cài đặt trình quản lý web
#RUN bản cập nhật trình quản lý webdriver-manager
CMD ["nút", "./test/script1.js"]

Sau đây là tệp javascript nodejs của tôi sử dụng chrome để khởi chạy ứng dụng và đăng nhập.

yêu cầu ("trình điều khiển chrome");
const {By,Key,Builder} = require("Selenium-webdriver");
const chrome = require('selenium-webdriver/chrome');

 
chức năng không đồng bộ getAuthCode(){ 

        const url = "https://abcd.com";
        
       // Để đợi trình duyệt xây dựng và khởi chạy đúng cách
        hãy để trình điều khiển = đang chờ Trình tạo mới ()
            .forBrowser("cơm")
            .setChromeOptions(chrome.Options().headless() mới) 
            
            //.setChromeOptions(new chrome.Options().addArguments(['--no-sandbox','-headless', '--disable-dev-shm-usage']))           
        
            .xây dựng();
        
        đang đợi driver.get(url);
        console.log(trình điều khiển);
        const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
        chờ chờ (1 * 20 * 1000);
        đang đợi driver.manage().window().setRect({ width: 1552, height: 840 });
        đang đợi driver.findElement(By.id("emailInput")).click();
        đang đợi driver.findElement(By.id("emailInput")).sendKeys("[email protected]");
        
        đang đợi driver.findElement(By.id("submitbutton")).click();
        
        
        
        chờ chờ (1 * 20 * 1000);
       
        
        đang đợi driver.quit();
        
        trả về 'một số dữ liệu';

}
 
chức năng không đồng bộ testAuthCode()
{
    var cCode = đang chờ getAuthCode();
    console.log(cCode);
}
testAuthCode();

Khi tôi chạy tệp soạn thảo docker của mình bằng cùng một tệp docker được cung cấp ở trên, tôi gặp lỗi sau.

WebDriverError: lỗi không xác định: Chrome không khởi động được: thoát bất thường.
-nodejs-1 | (lỗi không xác định: tệp DevToolsActivePort không tồn tại)
-nodejs-1 | (Quá trình bắt đầu từ vị trí chrome /usr/bin/google-chrome không còn chạy nữa, vì vậy ChromeDriver giả định rằng Chrome đã gặp sự cố.)
-nodejs-1 | tại Object.throwDecodedError (/LT/node_modules/Selenium-webdriver/lib/error.js:539:15)

Tôi biết lý do, Nó không thể tìm thấy chromedriver ở đường dẫn mặc định '/usr/bin/google-chrome'.

Một trong hai

  1. Tôi phải cài đặt chrome ở vị trí mặc định đã cho Hoặc
  2. cung cấp đường dẫn của vị trí mà chrome thực sự được cài đặt.

Trong cả hai trường hợp, Làm cách nào để thực hiện điều đó trong JavaScript hoặc docker?

PS: Tập lệnh chạy hoàn toàn tốt trong môi trường cửa sổ cục bộ của tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.