【问题标题】:WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127WebDriverException:消息:服务 chromedriver 意外退出。状态码是:127
【发布时间】:2018-08-25 15:50:13
【问题描述】:

我想在我的服务器上使用 selenium 构建我的爬虫。

因此我已经在我的 Ubuntu17.10 服务器上安装/下载了所需的依赖项,例如 chromedriver、chromium-browser 等

但是,当我运行以下代码时:

driver = webdriver.Chrome()

它返回以下错误:

---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
<ipython-input-14-2cdab8938403> in <module>()
----> 1 driver = webdriver.Chrome()

/home/zachary/.local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options)
     66             service_args=service_args,
     67             log_path=service_log_path)
---> 68         self.service.start()
     69 
     70         try:

/home/zachary/.local/lib/python3.6/site-packages/selenium/webdriver/common/service.py in start(self)
     96         count = 0
     97         while True:
---> 98             self.assert_process_still_running()
     99             if self.is_connectable():
    100                 break

/home/zachary/.local/lib/python3.6/site-packages/selenium/webdriver/common/service.py in assert_process_still_running(self)
    109             raise WebDriverException(
    110                 'Service %s unexpectedly exited. Status code was: %s'
--> 111                 % (self.path, return_code)
    112             )
    113 

WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127

兴奋是什么意思..?

我无法理解该错误代码的初衷以及从哪里开始修复它。

这看起来非常罕见。

可能相关:

我已经在我的桌面上安装了 ubuntu desktop 17.10,但未能获得 GUI 启动。因此我只使用终端,但到目前为止效果很好。 我已经将 ssh 和远程控制 jupyter notebook 从我的 mac 安装到服务器桌面,这些错误来自它。 希望此信息与解决此错误相关,否则将中止它。

【问题讨论】:

    标签: python google-chrome selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    看来chromedriver 需要一些额外的库。这为我解决了这个问题:

    apt-get install -y libglib2.0-0=2.50.3-2 \
        libnss3=2:3.26.2-1.1+deb9u1 \
        libgconf-2-4=3.2.6-4+b1 \
        libfontconfig1=2.11.0-6.7+b1
    

    我正在使用 docker 容器而不是没有 X / GUI 的服务器/VM 进行类似的设置。

    为了弄清楚需要哪些依赖项,我反复尝试从命令行运行它,如下所示:/opt/chromedriver/2.33/chromedriver --version 一遍又一遍。

    然后每次我使用apt-cache search &lt;STUFF&gt;apt-cache madison &lt;STUFF&gt; 之类的命令来确定chromedriver 2.33 所需的deb 包的确切版本(在我的情况下,但我想类似的东西适用于任何chromedriver 的版本)。

    编辑

    正如 cmets 中所建议的,使用ldd 命令打印共享对象依赖关系可能是另一种选择。到今天为止,我的chromedriver 版本在原始答案几年后是83.0.4103.14 - 依赖关系也不同,但请参阅下文以了解可能缺少的内容:

    $ /usr/local/bin/chromedriver --version
    ChromeDriver 83.0.4103.14 (be04594a2b8411758b860104bc0a1033417178be-refs/branch-heads/4103@{#119})
    $ ldd /usr/local/bin/chromedriver
            linux-vdso.so.1 (0x00007fffff7f0000)
            libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f414739d000)
            libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f414737a000)
            librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f414736f000)
            libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f4147246000)
            libnss3.so => /usr/lib/x86_64-linux-gnu/libnss3.so (0x00007f41470f7000)
            libnssutil3.so => /usr/lib/x86_64-linux-gnu/libnssutil3.so (0x00007f41470c4000)
            libnspr4.so => /usr/lib/x86_64-linux-gnu/libnspr4.so (0x00007f4147082000)
            libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f4146f45000)
            libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4146df6000)
            libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4146ddb000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4146be9000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f4147e56000)
            libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f4146b76000)
            libplc4.so => /usr/lib/x86_64-linux-gnu/libplc4.so (0x00007f4146b6d000)
            libplds4.so => /usr/lib/x86_64-linux-gnu/libplds4.so (0x00007f4146b68000)
            libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f4146b3e000)
            libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f4146b38000)
            libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f4146b30000)
            libbsd.so.0 => /usr/lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f4146b14000)
    

    来自man ldd

    ldd 打印命令行指定的每个程序或共享对象所需的共享对象(共享库)。

    ...

    在通常情况下,ldd 调用标准动态链接器(参见 ld.so(8)) 将 LD_TRACE_LOADED_OBJECTS 环境变量设置为 1。这 使动态链接器检查程序的动态 依赖项,并查找(根据 ld.so(8) 中描述的规则) 并加载满足这些依赖关系的对象。对于每个 依赖关系,ldd 显示匹配对象的位置和 (十六进制)加载它的地址。

    【讨论】:

    • 我特别感谢您对您如何解决依赖关系(使用--version 运行)以及您如何使用apt-cache search 的描述。这对我很有帮助,谢谢!
    • 仅供参考:我基本上遵循了这个解决方案,只是版本号现在已经过时了。像这样使用基本引用下载对我有用:``` libglib2.0-0 \ libnss3 \ libgconf-2-4 \ libfontconfig1 \ ```我在docker中运行,所以我还需要添加``` curl -LO $CHROMIUM_DRIVER_LOCATION 解压缩 chromedriver_linux64.zip ``` 到我的入口点并以无头模式运行我的驱动程序。
    • 我不确定这是否是更好的方法,但另一种查看需要哪些库的方法是使用ldd。例如。 ldd /opt/chromedriver/x.xx/chromedriver,它将显示 .so 文件的列表。搜索那些没有找到的。这至少是一个迭代较少的过程
    【解决方案2】:

    在我的 VPS 上使用 selenium/chromedriver 时遇到了同样的错误。我安装了chromium-browser,问题就消失了。

    sudo apt-get install -y chromium-browser
    

    也许不是需要chromium-browser,而是随它一起安装了软件包。不过,这是一个快速的解决方案。

    【讨论】:

    • "包 chromium-browser 不可用,但被另一个包引用。这可能意味着该包丢失、已过时或只能从另一个来源获得"
    【解决方案3】:

    运行此命令进行故障排除:./chromedriver(您的 chrome 驱动程序二进制文件所在的位置)。

    您可能会看到如下错误:

    ./chromedriver: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory

    要解决此错误,只需运行:sudo apt-get install libnss3

    然后再次检查,看看这次是否有效:./chromedriver

    其他一些软件包也可能丢失。这是一个详尽的列表:

    gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

    您可能不需要所有这些,但您需要的可能会在上面列出。

    【讨论】:

    • 就我而言,这是可行的:sudo apt-get install libnss3
    • 很高兴知道谢谢@B.Kanani!
    【解决方案4】:

    我遇到了类似的问题,但结果证明我的问题是错误地设置了指向已删除文件夹的 service_log_path。

    webdriver.Chrome(executable_path='/path/to/chromedriver', service_log_path='/path/to/existing/folder')
    

    【讨论】:

    • 我也遇到了同样的问题,日志路径和文件不存在。一旦我创建了日志路径和文件,它就成功了。
    【解决方案5】:

    在使用 Selenium v​​3.11.0ChromeDriver v2.36Chrome v64.x 时,您必须下载最新的 来自ChromeDriver - WebDriver for Chrome 的 ChromeDriver 并将其放置在您的系统中。接下来在初始化 WebDriverWebBrowser 时,您必须传递参数 executable_path 以及 ChromeDriver 的绝对路径,如下所示:

    from selenium import webdriver
    
    driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
    driver.get("http://www.python.org")
    

    【讨论】:

    • brew cask install chromedriver之后可以通过driver = webdriver.Chrome("/usr/local/bin/chromedriver")在python脚本中初始化
    【解决方案6】:

    通过小心删除现有的 chromedriver 并将其更新到较新版本来解决:

    1. 删除所有现有的 chromedriver 文件
    2. 下载wget https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip(如果需要,将 2.46 位替换为较新的版本,在此处查看兼容版本:http://chromedriver.chromium.org/downloads
    3. 解压,通过运行chmod +x chromedriver转换为可执行文件
    4. 将其移至 mv -f chromedriver /usr/local/bin/chromedriver,使其出现在 PATH 中

    这应该可以解决一个问题。我认为更新不起作用,因为当我第一次尝试时,我没有删除旧版本,并且我仍然在不小心使用它。

    【讨论】:

      【解决方案7】:

      我收到了同样的硒跟踪错误:

      WebDriverException:消息:服务 chromedriver 意外退出。状态码是:127

      我的问题是由于在尝试手动运行 chromedriver 时使用的 chromedriver(版本 78)与浏览器(版本 79)不同,我会看到 Segmentation fault (core dumped)

      一旦我更新了我的 chromedriver 以匹配浏览器,它就能够成功启动

      在端口 9515 上启动 ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614})

      只允许本地连接。

      请保护 ChromeDriver 和相关测试框架使用的端口,防止恶意代码访问。

      【讨论】:

        【解决方案8】:

        我用这样的脚本来安装Chrome

        wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
        echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list
        apt update -y
        apt install -y gconf-service libasound2 libatk1.0-0 libcairo2 libcups2 libfontconfig1 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libxss1 fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
        apt install -y google-chrome-stable
        

        【讨论】:

          【解决方案9】:

          我遇到了同样的问题,问题是由于 chromedriver 版本造成的。

          请确保您使用最新的Chrome Browser 和最新的chromedriver

          【讨论】:

            【解决方案10】:

            恢复到旧版本也可能是一种解决方案...

            我使用的是 Ubuntu 18.10 并安装了最新的 Selenium (3.141.0) 和 ChromeDriver (75.0.3770.8),但也遇到了同样的权限问题,之后状态码为 127。

            我尝试安装 Chromium,发现 Ubuntu 使用的是 73 版。所以我从 Chromedriver 的最新版本(此时为 75)恢复到 73 版,这对我有用。

            【讨论】:

              猜你喜欢
              • 2019-05-07
              • 2019-05-31
              • 2020-09-16
              • 2019-05-01
              • 1970-01-01
              • 2022-08-23
              • 2021-03-15
              • 1970-01-01
              相关资源
              最近更新 更多