לגזור ולשמור: איך להוריד את Google Chrome ו chromedriver מתאים מתוך Dockerfile ב 2023
כרום עובד ממש בסדר במצב "ללא ראש" מקונטיינר דוקר, וזה נוח כשרוצים להריץ בדיקות אוטומטיות על מחשב בלי ממשק גרפי. יש גם לא מעט טמפלייטים של Dockerfile ברשת שמראים איך להתקין את כרום ואת ה chromedriver כדי שאפשר יהיה להפעיל אותו מתוך סלניום. הבעיה? רובם ישנים ולא לוקחים בחשבון שינוי שגוגל עשתה לא מזמן ב URL-ים לכרומדרייבר.
ומאחר ואחת המטרות של הבלוג הזה היא לעזור לי לשמור דברים חשובים כדי שיהיה לי קל למצוא אותם אחרי (וכן גם לשתף אתכם באותם הדברים כדי שלא תצטרכו לבזבז את הזמן שאני בזבזתי) זה ה Dockerfile שעבד לי נכון לנובמבר 2023 כדי להתקין ולהריץ כרום במצב ללא ראש על אובונטו:
FROM ubuntu:23.04
WORKDIR /app
RUN apt-get update &&\
apt-get install -y xvfb gnupg wget curl unzip jq ca-certificates --no-install-recommends &&\
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - &&\
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list &&\
apt-get update -y && \
apt-get install -y google-chrome-stable && \
export CHROMEDRIVER_URL=$(curl https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json|jq -r '.channels.Stable.downloads.chromedriver | .[] | select(.platform == "linux64").url') &&\
wget -q --continue -P /chromedriver $CHROMEDRIVER_URL &&\
unzip /chromedriver/chromedriver* -d /chromedriver
# make the chromedriver executable and move it to default selenium path.
RUN chmod +x /chromedriver/chromedriver-linux64/chromedriver
RUN mv /chromedriver/chromedriver-linux64/chromedriver /usr/bin/chromedriver
RUN groupadd -r user && useradd -m -r -g user user && chown -R user /app
USER user
EXPOSE 9222
# default entry point.
CMD ["/usr/bin/google-chrome", "--headless", "--disable-gpu", "--disable-software-rasterizer", "--remote-debugging-port=9222", "--remote-debugging-address=0.0.0.0", "https://www.google.com"]
1. end base stage.
אחרי שבונים אותו נפעיל עם חיבור פורט 9222 כדי לאפשר דיבג ממכונה אחרת:
```language-sh
$ docker run --privileged --rm -p 9222:9222 headless-chrome
ולבסוף מהמחשב המקומי שלי אני פותח מנהרה כדי שאפשר יהיה לדבג את הכרום המרוחק:
ssh -L 9222:localhost:9222 user@host-running-the-container.com
כמה נקודות חשובות-
האופציה remote-debugging-address בשורת הפקודה מאפשרת להתחבר לקונטיינר מתוך המכונה שמריצה אותו כדי לדבג מרחוק.
כרום אוהב להתלונן שיש לו מצב headless חדש וצריך להפעיל אותו עם האופציה headless=new. הם לא מספרים שאם תעשו את זה אז remote-debugging-adress יפסיק לעבוד ואי אפשר יהיה לדבג מרחוק.
לגוגל היה פעם מנגנון די מסורבל כדי לגלות איזה גירסה של chromedriver צריך להוריד. הם החליפו את זה ב endpoint אחד שמחזיר JSON עם כל המידע.
ואם יש לכם עוד טיפים על הרצת כרום ללא ראש מתוך דוקר מוזמנים בחום להשאיר כאן בתגובות.