我需要将我的小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文件不在工作目录中时,这是一个常见的问题。但事实就是如此。在创建虚拟环境时,我需要设置路径吗?如果需要,我该如何设置?再说一次,我擅长人工智能,不擅长应用程序开发。
我使用的是Python 3.9,使用的是Windows 10、Visual Studio Code和Flask
谢谢你
发布于 2021-05-18 18:04:20
在经历了几天的痛苦和磨难之后,我终于解决了这个问题,所以这里是我创建的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')我希望这能帮你省去那些让我头疼的麻烦。
发布于 2021-05-11 22:01:20
您还必须在容器中安装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/chromedriverhttps://stackoverflow.com/questions/67488276
复制相似问题