Docker Selenium:selenium.common.exceptions.WebDriverException:消息:服务chromedriver意外退出。状态码为:127

时间:2019-01-04 17:03:17

标签: python selenium docker selenium-webdriver selenium-chromedriver

我在python项目中使用了硒的chromedriver。

我正在成功构建我的Dockerfile:

FROM ubuntu:17.04
FROM selenium/standalone-chrome
FROM python:3.6
RUN apt update
RUN apt-get install -y libnss3 libgconf-2-4
ADD ./requirements.txt /tmp/requirements.txt
RUN python -m pip install -r /tmp/requirements.txt
ADD . /opt/example1/
# rights?
RUN chmod +x /opt/example1/assets/chromedriver
WORKDIR /opt/example1
CMD ["python","-u","program.py"]

但是当我运行docker容器时,出现以下错误:

  

回溯(最近一次通话最后一次):文件“ program.py”,第8行,在          MdCrawler(MD_START_URL,“ MobileDe”)。start()文件“ /opt/example1/mobile_de_crawler.py”,第17行, init       self.web_driver_chrome = webdriver.Chrome(executable_path = CHROME_DRIVER_PATH)文件   “ /usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py”,   第73行,初始化       self.service.start()文件“ /usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py”,   第98行,开始时       self.assert_process_still_running()文件“ /usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py”,   第111行,在assert_process_still_running中       %(self.path,return_code) selenium.common.exceptions.WebDriverException:消息:服务   / opt / example1 / assets / chromedriver意外退出。状态码   原为:127

任何人都知道如何才能防止此错误? 是什么原因导致此崩溃?

这是我发生错误的初始化代码:

CHROME_DRIVER_PATH = os.path.abspath('assets/chromedriver')


class MdCrawler(Crawler):

def __init__(self, start_url, source):
    super().__init__(start_url, source)
    serialized_arr = self.read_data_from_json_file(JSON_FILE_PATH)
    self.sent_ids = [] if serialized_arr is None else serialized_arr
    >>> self.web_driver_chrome = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)
    exit(1)

编辑1:

我已经编辑了Dockerfile(添加了ubuntu:17.04和aptget libnss3 libgconf-2-4)。构建了我的docker镜像后,出现了另一个错误:

  

selenium.common.exceptions.WebDriverException:消息:未知错误:   找不到Chrome二进制文件(驱动程序信息:chromedriver = 2.45.615279   (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),平台= Linux   4.9.125-linuxkit x86_64)

编辑2:

我已添加

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

对于我的Dockerfile,但是新错误即将出现:

  

引发exception_class(消息,屏幕,堆栈跟踪)selenium.common.exceptions.WebDriverException:消息:未知错误:   Chrome无法启动:异常退出(未知错误:   DevToolsActivePort文件不存在)(该过程始于   chrome位置/ usr / bin / google-chrome不再运行,因此   ChromeDriver假设Chrome已崩溃。)(驱动程序信息:   chromedriver = 2.45.615279   (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),平台= Linux   4.9.125-linuxkit x86_64)

2 个答案:

答案 0 :(得分:0)

您是否忘了添加 headless模式

chrome_options = Options()
chrome_options.add_argument("--headless")

答案 1 :(得分:0)

我在Docker容器中的Selenium chromedriver最小测试脚本如下:

import selenium.webdriver

options = selenium.webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')

driver = selenium.webdriver.Chrome(chrome_options=options)
driver.get('https://www.python.org/')
print(driver.title)
driver.close()

因此,您好像缺少了--headless--no-sandbox参数。