Score:0

วิธีส่งเส้นทาง chromedriver ไปยัง nodejs selenium-webdriver ใน Docker

ธง us
Jay

นี่คือไฟล์นักเทียบท่าของฉัน

จากโหนด:17.2.0

รากผู้ใช้

เวิร์คดีอาร์ /LT

RUN apt-รับการปรับปรุง
  
RUN apt-get install git -- ใช่

คัดลอก /LT
คัดลอก /LT/ทดสอบ
คัดลอก ["/LT/package.json", "."]

#ติดตั้ง Google Chrome
RUN apt-get ติดตั้ง wget
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get install ./google-chrome*.deb --ใช่

ENV CHROME_BIN=/usr/bin/google-chrome

ติดตั้ง RUN npm
เรียกใช้ npm ci
RUN npm ติดตั้ง nodejs
RUN npm ติดตั้ง mocha -g
RUN npm ติดตั้ง chromedriver -g --unsafe-perm
RUN npm ติดตั้ง selenium-webdriver
RUN npm ติดตั้ง webdriver-manager
อัพเดต #RUN webdriver-manager
CMD ["โหนด", "./test/script1.js"]

ต่อไปนี้คือไฟล์จาวาสคริปต์ nodejs ของฉันซึ่งใช้ chrome เพื่อเปิดแอปพลิเคชันและเข้าสู่ระบบ

ต้องการ ("Chromedriver");
const {โดย, คีย์, Builder} = ต้องการ ("ซีลีเนียม-webdriver");
const chrome = ต้องการ ('ซีลีเนียม-webdriver/chrome');

 
ฟังก์ชัน async getAuthCode(){ 

        const url = "https://abcd.com";
        
       // เพื่อรอให้เบราว์เซอร์สร้างและเปิดใช้งานอย่างถูกต้อง
        ให้ไดรเวอร์ = รอตัวสร้างใหม่ ()
            .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(resolve => setTimeout(resolve, ms));
        รอ รอ (1 * 20 * 1,000);
        รอ driver.manage().window().setRect({ width: 1552, height: 840 });
        รอ driver.findElement(By.id("emailInput")).click();
        รอ driver.findElement(By.id("emailInput")).sendKeys("[email protected]");
        
        รอ driver.findElement(By.id("submitbutton")).click();
        
        
        
        รอ รอ (1 * 20 * 1,000);
       
        
        รอไดรเวอร์ออกจาก ();
        
        ส่งคืน 'ข้อมูลบางส่วน';

}
 
ฟังก์ชัน async testAuthCode()
{
    var cCode = กำลังรอ getAuthCode();
    console.log(โค้ด);
}
testAuthCode();

เมื่อฉันเรียกใช้ไฟล์เขียนนักเทียบท่าโดยใช้ไฟล์นักเทียบท่าเดียวกันกับที่ระบุข้างต้น ฉันได้รับข้อผิดพลาดดังต่อไปนี้

WebDriverError: ข้อผิดพลาดที่ไม่รู้จัก: Chrome ไม่สามารถเริ่มทำงาน: ออกอย่างผิดปกติ
-nodejs-1 | (ข้อผิดพลาดที่ไม่รู้จัก: ไม่มีไฟล์ DevToolsActivePort)
-nodejs-1 | (กระบวนการเริ่มต้นจากตำแหน่ง chrome /usr/bin/google-chrome ไม่ทำงานอีกต่อไป ดังนั้น ChromeDriver จึงถือว่า Chrome ขัดข้อง)
-nodejs-1 | ที่ Object.throwDecodedError (/LT/node_modules/selenium-webdriver/lib/error.js:539:15)

ฉันรู้สาเหตุ ไม่พบไดรเวอร์ chrome ที่เส้นทางเริ่มต้น '/usr/bin/google-chrome'

ทั้ง

  1. ฉันต้องติดตั้ง chrome ที่ตำแหน่งเริ่มต้นที่กำหนด หรือ
  2. ให้เส้นทางของตำแหน่งที่ติดตั้ง Chrome จริง

ไม่ว่าในกรณีใด ฉันจะทำใน JavaScript หรือ docker ได้อย่างไร

PS: สคริปต์ทำงานได้ดีอย่างสมบูรณ์ในสภาพแวดล้อม windows ท้องถิ่นของฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา