WebDriverException:消息:服务 chromedriver 意外退出。状态代码为:127
- 2025-01-17 09:23:00
- admin 原创
- 138
问题描述:
我想在我的服务器上使用 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 桌面 17.10,但无法启动 GUI。因此,我只能使用终端,但到目前为止,它运行良好。我已安装 ssh 并从我的 mac 远程控制 jupyter 笔记本到服务器桌面,这些错误就是由此产生的。希望这些信息与解决此错误有关,否则将中止它。
解决方案 1:
似乎chromedriver
需要一些额外的库。这为我解决了这个问题:
apt-get install -y libglib2.0-0=2.50.3-2 \n libnss3=2:3.26.2-1.1+deb9u1 \n libgconf-2-4=3.2.6-4+b1 \n libfontconfig1=2.11.0-6.7+b1
我正在使用 Docker 容器而不是没有 X / GUI 的服务器 /VM 进行类似的设置。
为了弄清楚需要哪些依赖项,我反复尝试从命令行运行它,就像这样:/opt/chromedriver/2.33/chromedriver --version
一遍又一遍。
然后每次我都使用像apt-cache search <STUFF>
和这样的命令apt-cache madison <STUFF>
来找出2.33deb
所需的软件包的确切版本chromedriver
(在我的情况下,但我猜类似的方法对任何版本的都会有效chromedriver
)。
编辑
正如评论中所建议的,使用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 都会显示匹配对象的位置以及加载该对象的(十六进制)地址。
解决方案 2:
我在 VPS 上使用 selenium/chromedriver 时遇到了同样的错误。我安装了它chromium-browser
,问题就解决了。
sudo apt-get install -y 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
您可能不需要所有这些,但您需要的那些可能已列在上面。
解决方案 4:
我遇到了类似的问题,但事实证明我的问题是错误地设置了 service_log_path,它指向已删除的文件夹。
webdriver.Chrome(executable_path='/path/to/chromedriver', service_log_path='/path/to/existing/folder')
解决方案 5:
在使用Selenium v3.11.0、ChromeDriver v2.36和Chrome v64.x时,您必须从ChromeDriver - WebDriver for Chrome下载最新的ChromeDriver并将其放入您的系统中。接下来,在初始化WebDriver和WebBrowser时,您必须传递参数以及ChromeDriver的绝对路径,如下所示:executable_path
from selenium import webdriver
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get("http://www.python.org")
解决方案 6:
我使用这样的脚本来安装 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
解决方案 7:
@TPPZ 的答案需要更新
$ apt-get update -y
$ apt-get install -y libglib2.0-0 libnss3 libgconf-2-4 libfontconfig1
解决方案 8:
通过小心地删除现有的 chromedriver 并将其更新到较新的版本来解决:
删除所有现有的 chromedriver 文件
下载
wget https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip
(如果需要,请将 2.46 位替换为较新的版本,请参阅此处的兼容版本:http: //chromedriver.chromium.org/downloads)解压,通过运行转换为可执行文件
chmod +x chromedriver
将其移动到
mv -f chromedriver /usr/local/bin/chromedriver
PATH 中
这应该可以解决问题。我以为更新不起作用,因为我第一次尝试时没有删除旧版本,而且我仍在意外使用它。
解决方案 9:
我收到了相同的硒跟踪错误:
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和相关测试框架使用的端口,以防止恶意代码访问。
解决方案 10:
我通过升级 Selenium 版本解决了这个问题。
对于通过 安装 Selenium 的用户,需要注意的是conda
,conda 上的最新 Selenium 版本远远落后于 上的版本pip
,因此请切换到pip
安装。
解决方案 11:
我遇到了同样的问题,问题是由于chromedriver版本引起的。
请确保您使用的是最新的Chrome 浏览器和最新的chromedriver。
解决方案 12:
恢复到旧版本也许也是一个解决方案......
我正在使用 Ubuntu 18.10,并安装了最新的 Selenium (3.141.0) 和 ChromeDriver (75.0.3770.8),但也遇到了同样的权限问题,之后状态代码为 127。
我尝试安装 Chromium,并注意到 Ubuntu 使用的是版本 73。因此,我将 Chromedriver 的最新版本(此时为 75)恢复到版本 73,这对我来说是有效的。
解决方案 13:
如果您在云中运行 IDE,则可能会发生此错误。GITPOD 等。尝试创建本地 repo 和 VSCode(或您选择的 IDE),selenium 应该可以正常工作。
解决方案 14:
为其创建了一个Gitpod 存储库。
通过访问以下内容打开 Gitpod 中的存储库:
通过在 Gitpod 终端中运行以下命令开始抓取:
python main.py
解决方案 15:
此命令帮我解决了这个问题。只需安装 Chrome 驱动程序即可。
sudo apt install chromium-chromedriver
解决方案 16:
对于 MacOS 用户
步骤1:运行以下命令进行安装chromedriver
brew install chromedriver
它将为您提供一个可执行文件路径,例如,/usr/local/bin/chromedriver
步骤 2:运行以下命令批准可执行文件
xattr -d com.apple.quarantine /usr/local/bin/chromedriver
解决方案 17:
就我而言,我得到了以下WSL2
信息Ubuntu 22.04
:
Traceback (most recent call last):
File "/home/camilo/.../Patchwise_Inference_Similarity.py", line 306, in <module>
generate_pdf_report_from_html(file_name, html, seg_file_dir)
File "/home/camilo/.../generate_pdf_report_from_html.py", line 27, in generate_pdf_report_from_html
converter.convert(f"file:///{html_file_path}", pdf_file_path, timeout = 5)
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/pyhtml2pdf/converter.py", line 38, in convert
result = __get_pdf_from_html(
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/pyhtml2pdf/converter.py", line 77, in __get_pdf_from_html
driver = webdriver.Chrome(service=service, options=webdriver_options)
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 70, in __init__
super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 90, in __init__
self.service.start()
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 98, in start
self.assert_process_still_running()
File "/home/camilo/miniconda3/envs/tf-2.14/lib/python3.10/site-packages/selenium/webdriver/common/service.py", line 110, in assert_process_still_running
raise WebDriverException(
selenium.common.exceptions.WebDriverException: Message: Service /home/camilo/.wdm/drivers/chromedriver/linux64/114.0.5735.90/chromedriver unexpectedly exited. Status code was: 127
正如错误所暗示的,chromedriver
在里面:~/.wdm/drivers/chromedriver/linux64/114.0.5735.90
。那里有一个chromedriver.zip
文件,它已经被提取到一个chromedriver
文件中(因此,我不需要再次提取它)。然后,我运行:ldd chromedriver
并得到以下输出:
/bin/bash: /home/camilo/miniconda3/envs/tf-2.14/lib/libtinfo.so.6: no version information available (required by /bin/bash)
linux-vdso.so.1 (0x00007ffcf9588000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f927b511000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f927b50c000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f927b3c3000)
libnss3.so => not found
libnssutil3.so => not found
libnspr4.so => not found
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f927b2d8000)
libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f927b2af000)
libgcc_s.so.1 => /home/camilo/miniconda3/envs/tf-2.14/lib/libgcc_s.so.1 (0x00007f927b295000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f927b083000)
/lib64/ld-linux-x86-64.so.2 (0x00007f927c397000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f927afe7000)
libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f927afe1000)
libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f927afd9000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f927afc3000)
libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f927afb4000)
请注意libnss3.so
,未找到 、 。因此,我运行了libnssutil3.so
:libnspr4.so
sudo apt update && sudo apt upgrade && sudo apt install libnss3 libnspr4
我再次运行该ldd
命令来检查是否找到了所有内容,最后,原来的错误消失了。