Selenium with Python - Chromedriver 必须在 PATH 中
Posted
技术标签:
【中文标题】Selenium with Python - Chromedriver 必须在 PATH 中【英文标题】:Selenium with Python - Chromedriver have to be in PATH 【发布时间】:2018-08-15 18:53:07 【问题描述】:由于超过 2 小时,我试图在非容器 alpine 上使用 chrome 在 python 中设置 Selenium。我不知道为什么我会收到此错误消息:
browser = webdriver.Chrome()
File "/usr/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__
self.service.start()
File "/usr/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
我不明白,因为谷歌驱动程序在路径中:
有人可以帮助我吗? 非常感谢
PS: 这是我的 dockerfile 的一部分
RUN wget "https://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip" &&\
busybox unzip chromedriver_linux64.zip &&\
chmod a+x chromedriver &&\
mv chromedriver /usr/bin/
这是我的方法:
def __init__(self, url, parser = "lxml") :
self.url = url
self.parser = parser
browser = webdriver.Chrome()
browser.get(self.url)
...
ps:码头文件:
FROM alpine:3.7
RUN apk add --update bash &&\
apk update &&\
apk upgrade
RUN apk add --no-cache python-dev ;\
apk add --no-cache python
#telecharge lib python scraper
RUN apk add --no-cache py-pip &&\
apk add --no-cache linux-headers &&\
apk add --no-cache texinfo &&\
apk add --no-cache gcc &&\
apk add --no-cache g++ &&\
apk add --no-cache gfortran &&\
apk add --no-cache libxml2-dev &&\
apk add --no-cache xmlsec-dev &&\
apk add --no-cache py-requests &&\
apk add --no-cache chromium &&\
apk add --no-cache chromium-chromedriver
#install lib python scraper
RUN pip install beautifulsoup4 &&\
pip install requests &&\
pip install lxml &&\
pip install html5lib &&\
pip install urllib3 &&\
pip install -U selenium
#telecharge driver pour selenium
RUN wget "https://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip" &&\
busybox unzip chromedriver_linux64.zip &&\
chmod a+x chromedriver &&\
mv chromedriver /usr/bin/
# prepare le shell
CMD ["bash"]
WORKDIR "/root"
【问题讨论】:
您是否尝试过使用os.chdir()
手动将目录更改为chromedriver所在的目录?
什么意思?我不明白...我试过这个:webdriver.Chrome("/usr/bin/chromedriver")
在您的 Python 脚本中,在使用 browser = webdriver.Chrome()
创建 chromedriver 的实例之前,使用 os.chdir('Path to chromedriver')
将目录更改为您的 chromedriver 在您的机器上所在的路径
或者试试webdriver.Chrome(executable_path="/usr/bin/chromedriver")
你确定你有正确的权限来执行它,或者它是否被设置为一个可执行文件?
【参考方案1】:
我没有使用 Chrome 而是使用 firefox,这是我所有的 dockerfile。这对我有用。我希望这会对你有所帮助。 玩得开心
FROM alpine:3.7
RUN apk add --no-cache bash &&\
apk update &&\
apk upgrade
ENV PATH /usr/local/bin:$PATH
RUN apk add --no-cache make &&\
apk add --no-cache python3-dev &&\
apk add --no-cache python3 &&\
apk add --no-cache firefox-esr &&\
apk add --no-cache wget &&\
apk add --no-cache git &&\
apk add --no-cache icu-libs &&\
apk add --no-cache xvfb &&\
apk add --no-cache linux-headers &&\
apk add --no-cache texinfo &&\
apk add --no-cache gcc &&\
apk add --no-cache g++ &&\
apk add --no-cache gfortran &&\
apk add --no-cache libxml2-dev &&\
apk add --no-cache xmlsec-dev &&\
apk add --no-cache py-requests &&\
apk add --no-cache qt-dev &&\
apk add --no-cache openjdk7-jre &&\
apk add --no-cache dbus-x11 &&\
apk add --no-cache ttf-freefont &&\
rm -rf /var/cache/apk/*
#python
RUN python3 -m ensurepip &&\
rm -r /usr/lib/python*/ensurepip &&\
pip3 install --upgrade pip setuptools &&\
if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi &&\
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi &&\
rm -r /root/.cache
#firefox
RUN rm -rf /tmp/* /var/cache/apk/* &&\
wget "https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz" &&\
tar -xvf geckodriver-v0.19.1-linux64.tar.gz &&\
rm -rf geckodriver-v0.19.1-linux64.tar.gz &&\
chmod a+x geckodriver &&\
mv geckodriver /usr/local/bin/
#selenium
RUN pip install "selenium<3" &&\
pip install virtualenv &&\
pip install pyvirtualdisplay
#X server
RUN git clone "https://github.com/niklasb/webkit-server.git" &&\
cd webkit-server &&\
python setup.py install
ADD start_script.sh /tmp/start_script.sh
RUN chmod +x /tmp/start_script.sh
#mysql
RUN apk add --no-cache mariadb-dev
RUN pip install mysqlclient
# prepare le shell
RUN mkdir /var/shared
WORKDIR "/var/shared"
CMD ["/tmp/start_script.sh"]
还有启动脚本:
#!/bin/sh
Xvfb :00 &
export DISPLAY=:00
python3 scraper/main.py
【讨论】:
以上是关于Selenium with Python - Chromedriver 必须在 PATH 中的主要内容,如果未能解决你的问题,请参考以下文章
[Selenium+Java] How to Use Selenium with Python: Complete Tutorial
Selenium with Python 001 - 安装篇
Selenium with Python 007 - Cookie处理
Selenium with Python 003 - 页面元素定位