【问题标题】:Chromedriver executable path not found in Docker Container在 Docker 容器中找不到 Chromedriver 可执行路径
【发布时间】:2021-09-02 04:34:44
【问题描述】:

我用下面的 Docker 文件创建了一个 docker 镜像。它会安装最新版本的 Google Chrome 和 chrome 驱动程序。以及其他 pip 包。

Dockerfile

FROM python:3.9

# Install Chrome WebDriver
RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    rm /tmp/chromedriver_linux64.zip && \
    chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \
    ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver

# Install Google Chrome
RUN curl -sS -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 -yqq update && \
    apt-get -yqq install google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*


COPY requirements.txt .

RUN pip install -r requirements.txt

WORKDIR /seltesting

COPY ./app ./app

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

chromedriver.exe 文件位于容器中,正如我在 CLI 中找到的那样。它在这个目录'/usr/local/bin/chromedriver'中。

python 代码

driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver')

我正在使用 venv,因为我也在使用烧瓶来创建使用 chrome 驱动程序的微服务。这会导致问题吗?

任何帮助将不胜感激,因为我已经坚持了很长时间。

【问题讨论】:

  • 你能在容器中手动启动那个可执行文件吗?
  • 你也可以分享你得到的错误的确切文本吗?
  • 嗨@AlexeyR。非常感谢您的帮助,当我在容器中执行文件时收到此消息 - 在端口 9515 上启动 ChromeDriver 92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634}) 仅允许本地连接。请参阅chromedriver.chromium.org/security-considerations 获取有关确保 ChromeDriver 安全的建议。 [1630890753.041][严重]:绑定()失败:无法分配请求的地址(99)ChromeDriver已成功启动。
  • @AlexeyR。感谢您的帮助。我刚刚尝试了该解决方案,即使我不再收到该错误。仍然找不到 chrome 驱动程序。在端口 9515 上启动 ChromeDriver 92.0.4515.107 (87a818b10553a07434ea9e2b6dccf3cbe7895134-refs/branch-heads/4515@{#1634}) 只允许本地连接。请参阅chromedriver.chromium.org/security-considerations 获取有关确保 ChromeDriver 安全的建议。 ChromeDriver 已成功启动我正在尝试在 Flask 应用程序中运行 chromedriver,您知道这是否会导致我出现问题吗?

标签: python docker selenium


【解决方案1】:

我发现了问题,你需要将所有的python文件添加到Dockerfile中。请找到将 Chromedriver 和 Chrome 安装到镜像上的 Dockerfile 以及容器内 chromedriver 的默认路径。

Dockerfile

FROM python:3.9

ADD /app/main.py .
ADD /app/connectdriver.py .

# Install Chrome WebDriver
RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \
    rm /tmp/chromedriver_linux64.zip && \
    chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \
    ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver

# Install Google Chrome
RUN curl -sS -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 -yqq update && \
    apt-get -yqq install google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN pip install -r requirements.txt

WORKDIR /seleniumtesting

COPY ./app ./app


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

python 驱动脚本

driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver')

【讨论】:

    【解决方案2】:

    在 Python-Selenium 中,我不会传递 chromedriver 路径,而是使用自动安装程序,这样在这种情况下就不会失败。

    chromedriver-autoinstaller

    自动下载并安装支持当前安装的chrome 版本的chromedriver。此安装程序支持LinuxMacOSWindows operating systems.

    安装

    pip install chromedriver-autoinstaller
    

    用法

    只需在要使用 chromedriver 的模块中输入 import chromedriver_autoinstaller

    示例

    from selenium import webdriver
    import chromedriver_autoinstaller
    
    
    chromedriver_autoinstaller.install()  # Check if the current version of chromedriver exists
                                          # and if it doesn't exist, download it automatically,
                                          # then add chromedriver to path
    
    driver = webdriver.Chrome()
    driver.get("http://www.python.org")
    assert "Python" in driver.title
    

    结论:

    如果您在上面看到,我没有通过任何路径,而只是 driver = webdriver.Chrome() 前面加上 chromedriver_autoinstaller.install(),应该可以帮助您解决问题。

    Official Reference link

    【讨论】:

    • 嗨@cruisepandey,我已经尝试过了,但不幸的是它不起作用:(。我尝试了两种配置方式但没有运气:(谢谢你的帮助:)。
    • 理想情况下应该是这样,这种技术出了什么问题?
    • 还是说找不到驱动。 UnboundLocalError:分配前引用的局部变量“驱动程序”
    • 因为我认为你错过了事先运行pip install chromedriver-autoinstaller。因为在我的解决方案中,您不需要拥有chromdriver.exe 的物理副本
    • 抱歉,我确实将 chromedriver-autoinstaller 安装到了容器和 requirements.txt 页面中。作为 'chromedriver-autoinstaller==0.2.2'
    【解决方案3】:

    确保您提供的chrome驱动的路径是正确的。

    然后:

    chrome_options = Options()
    chrome_options.add_argument("--headless")
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    driver = webdriver.Chrome(executable_path = "PATH/to/chromedriver", options = chrome_options)
    

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2021-03-04
      相关资源
      最近更新 更多