我想在服务器上使用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启动。因此我只使用终端,但它到目前为止工作良好。 我已经从我的mac到服务器桌面安装了ssh和远程控制jupyter笔记本,这些错误来自它。 希望此信息与解决此错误相关,否则将中止。
答案 0 :(得分:17)
似乎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
一遍又一遍。
然后在eache时间我使用apt-cache search <STUFF>
和apt-cache madison <STUFF>
之类的命令来确定deb
2.33所需的chromedriver
包的确切版本(在我的情况下,但是我想类似的东西适用于任何版本的chromedriver
)。
答案 1 :(得分:6)
在我的VPS上使用硒/ chromedriver时,我遇到了相同的错误。我安装了chromium-browser
,问题消失了。
sudo apt-get install -y chromium-browser
也许不是chromium-browser
是必需的,但是软件包是和它一起安装的。但是,那是一个快速修复。
答案 2 :(得分:5)
运行此命令进行故障排除:./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
您可能不需要所有这些,但上面可能列出了您需要的那些。
答案 3 :(得分:2)
使用 Selenium v3.11.0 , ChromeDriver v2.36 和 Chrome v64.x 时,您必须下载最新的来自ChromeDriver - WebDriver for Chrome的ChromeDriver 并将其放置在您的系统中。接下来,在初始化 WebDriver 和 WebBrowser 时,您必须传递参数executable_path
以及 ChromeDriver 的绝对路径,如下所示:
from selenium import webdriver
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
driver.get("http://www.python.org")
答案 4 :(得分:1)
通过仔细删除现有的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中这应该可以解决问题。我以为更新不起作用,因为当我初次尝试时,我没有删除旧版本,而我仍然不小心使用了它。
答案 5 :(得分:0)
我遇到了同样的问题,并且该问题是由于 chromedriver 版本造成的。
请确保您使用的是最新的Chrome Browser和最新的chromedriver。
答案 6 :(得分:0)
恢复为旧版本也可能是解决方案...
我正在使用Ubuntu 18.10,并安装了最新的Selenium(3.141.0)和ChromeDriver(75.0.3770.8),但也存在相同的权限问题,其后的状态码为127。
我尝试安装Chromium,并注意到Ubuntu正在使用版本73。因此,我从最新版本的Chromedriver(目前为75)恢复到了版本73,这对我有用。
答案 7 :(得分:0)
我有一个类似的问题,但事实证明我的问题是错误地将service_log_path设置为指向已删除的文件夹。
webdriver.Chrome(executable_path='/path/to/chromedriver', service_log_path='/path/to/existing/folder')
答案 8 :(得分:0)
我收到了相同的硒跟踪错误:
WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127
我的问题是由于尝试手动运行chromedriver时使用与浏览器(版本79)不同的chromedriver版本(版本78)
Segmentation fault (core dumped)
一旦我更新了chromedriver以使其与浏览器匹配,它便能够成功启动
在端口9515上启动ChromeDriver 79.0.3945.36(3582db32b33893869b8c1339e8f4d9ed1816f143-refs / branch-heads / 3945 @ {#614})
仅允许本地连接。
请保护ChromeDriver和相关测试框架使用的端口,以防止恶意代码访问。
答案 9 :(得分:0)
我用这样的脚本来安装 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