python - 在 Docker 容器中找不到 Chromedriver 可执行文件路径
问题描述
我用下面的 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'中。
蟒蛇代码
driver = webdriver.Chrome(options=options, executable_path='/usr/local/bin/chromedriver')
我正在使用 venv,因为我也在使用烧瓶来创建使用 chrome 驱动程序的微服务。这会引起问题吗?
任何帮助将不胜感激,因为我已经坚持了很长时间。
解决方案
我找到了问题,您需要将所有 python 文件添加到 Dockerfile 中。请找到 Dockerfile 以将 Chromedriver 和 Chrome 安装到图像上以及容器内 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')
推荐阅读
- c# - 当绑定到 ObservableCollection 的属性发生变化时如何通知 ViewModel?
- wordpress - 如何在wordpress post url中添加带有斜线的几个参数?
- typescript - 如何让打字稿知道依赖于传入参数的函数的返回类型
- laravel - 如何在 laravel Blade 中获取单个类别及其子类别
- arrays - 比较 VueJS 中的两个数组及其 ID
- google-apps-script - 如何根据单元格值将值切换为负值
- javascript - Ionic 4:找不到模拟器图像(avds)
- c# - 有没有办法通过 url 发送帖子但使用 www 打开页面?看起来像一个结合 Unity c#
- php - 基于使用 ifelse 的状态列如何在 td 中显示差异背景颜色
- google-cloud-platform - GCP 自动缩减保护