【问题标题】:Selenium within a Docker container can't find chromedriverDocker 容器中的 Selenium 找不到 chromedriver
【发布时间】:2021-08-01 21:50:15
【问题描述】:

我需要将我的小 Flask 应用程序放入 Docker 容器中,然后检查我公司的客户安装了哪种类型的 Google 标签。为此,我需要 selenium-wire 。你提供了一个网站,你会得到一个 json,告诉你安装了哪些标签(有点像 http://gachecker.com/ )。现在它与 Flask 应用程序配合得很好。当我尝试将其放入 Docker 时出现问题,这是我的 docker 脚本:

FROM python:3.9 WORKDIR /bziiit_checker_app

RUN pip install flask flask_restful requests BeautifulSoup4 selenium-wire undetected-chromedriver chromedriver-py

COPY ./app ./app

CMD ["python", "./app/main.py"]

一旦它在 Docker 中并尝试运行它,我就会收到该消息

"selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH"

当 chromedriver.exe 文件不在工作目录中时,这是一个常见问题。但它是。 创建虚拟环境时是否需要设置 PATH,如果需要,我该怎么做? 再说一次,我擅长人工智能,不擅长应用开发。

我使用的是 Python 3.9,并且使用的是 Windows 10、Visual Studio Code 和 Flask

谢谢

【问题讨论】:

  • 我认为你可以通过简单地在你的脚本/docker cli export PATH='path/to/chromedriver.exe'987654324@中运行来设置路径

标签: python docker selenium


【解决方案1】:

经过几天的痛苦和折磨,我终于解决了,所以这是我创建的 Docker 文件,用于让 chromedriver 在 Docker 容器中工作。

这适用于使用 VS 代码的 Windows 10

FROM python:3.8

# Adding trusting keys to apt for repositories
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -

# Adding Google Chrome to the repositories
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'

# Updating apt to see and install Google Chrome
RUN apt-get -y update

# Magic happens
RUN apt-get install -y google-chrome-stable

# Installing Unzip
RUN apt-get install -yqq unzip

# Download the Chrome Driver
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable

# install chromedriver
RUN apt-get install -yqq unzip
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/

# Set display port as an environment variable
ENV DISPLAY=:99

COPY ./app ./app
WORKDIR /app 

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

CMD ["python", "./main.py"]

然后,在您的脚本中,将这些参数添加到 Chromedriver 的选项中,否则它会给您一条错误消息,告诉您“Chromedriver 已异常退出”

option = webdriver.ChromeOptions()

option.add_argument("--disable-gpu")
option.add_argument("--disable-extensions")
option.add_argument("--disable-infobars")
option.add_argument("--start-maximized")
option.add_argument("--disable-notifications")
option.add_argument('--headless')
option.add_argument('--no-sandbox')
option.add_argument('--disable-dev-shm-usage')

我希望这可以让人们免去这个问题给我带来的所有头痛

【讨论】:

    【解决方案2】:

    您还必须在容器中安装 chrome 驱动程序和 chrome

    RUN add-apt-repository -y ppa:openjdk-r/ppa
    RUN apt-get install -y openjdk-12-jre cron wget unzip
    
    ARG CHROME_VERSION=78.0.3904.87-1
    RUN 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-chrome.list \
        && apt-get update -qqy \
        && apt-get -qqy install google-chrome-stable=$CHROME_VERSION \
        && rm /etc/apt/sources.list.d/google-chrome.list \
        && rm -rf /var/lib/apt/lists/* /var/cache/apt/* \
            && sed -i 's/"$HERE\/chrome"/"$HERE\/chrome" --no-sandbox/g' /opt/google/chrome/google-chrome
    
    
    ARG CHROME_DRIVER_VERSION=78.0.3904.70
    RUN wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip \
        && rm -rf /opt/chromedriver \
        && unzip /tmp/chromedriver_linux64.zip -d /opt \
        && rm /tmp/chromedriver_linux64.zip \
        && mv /opt/chromedriver /opt/chromedriver-$CHROME_DRIVER_VERSION \
        && chmod 755 /opt/chromedriver-$CHROME_DRIVER_VERSION \
        && ln -fs /opt/chromedriver-$CHROME_DRIVER_VERSION /usr/bin/chromedriver
    
    
    

    【讨论】:

    • 非常感谢您的及时回答 Asnim 但是我在尝试您的好代码时遇到此错误:` => 错误 [5/9] RUN add-apt-repository -y ppa:openjdk -r/ppa 1.0s ------ > [5/9] 运行 add-apt-repository -y ppa:openjdk-r/ppa: #9 0.896 /bin/sh: 1: add-apt-repository:未找到`
    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2021-12-29
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多