我有一个在另一个python程序中执行的selenium脚本。这个程序只会在我使用ssh作为root登录到服务器时执行,但不能由www数据用户执行,因为它返回错误:
selenium.common.exceptions.WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1
我使用以下命令运行脚本:
os.system('python3 /var/website/webscraping.py' + str(VARIABLE))
任何帮助都会被通知!
理想情况下,您应该能够以www数据用户的身份执行程序。但是,此错误消息。。。
selenium.common.exceptions.WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1
意味着ChromeDriver意外退出。
拇指规则
Chrome在启动过程中崩溃的一个常见原因是在Linux上以
root
用户(administrator
)的身份运行Chrome。虽然在创建WebDriver会话时可以通过传递--no-sandbox
标志来解决此问题,但这种配置是不受支持的,并且非常不鼓励。您需要将环境配置为以常规用户身份运行Chrome
此错误背后可能有许多原因。您的代码试用和完整的错误堆栈会让我们更清楚地了解引擎盖下发生的错误。
然而,有几个补救步骤如下:
确保Chrome更新为当前Chrome=96.04664.45(根据Chrome=96.44664.45发布说明)。
确保ChromeDriver更新到当前ChromeDriver v96.0级别。
确保您已从与您的底层操作系统相关的下载位置下载了ChromeDriver二进制文件的确切格式:
- chromedriver_win32:适用于Windows操作系统
- chromedriver_mac64:适用于MAC OS X
- chromedriver_linux64:适用于Linux操作系统
使用Selenium,您需要通过参数executable_path传递ChromeDriver二进制文件的绝对路径,并且您需要在单引号(即
''
)内提及路径,该路径由一个正斜杠(即)和原始开关(如
r
)分隔,如下所示:from selenium import webdriver driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver') driver.get(url)
确保ChromeDriver二进制文件具有非管理员用户的可执行权限。
以非管理员用户的身份执行测试。
错误的另一个潜在原因可能是由于
/etc/hosts
中缺少条目127.0.0.1 localhost
Windows操作系统-将
127.0.0.1 localhost
添加到/etc/hosts
Mac OSX-确保以下条目:
127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost
参考文献
根据selenium.com.mon.exceptions.WebDriverException中的讨论:消息:无法连接到服务geckodriver:
- Selenium不需要在主机文件中显式设置
127.0.0.1 localhost
- 但是,必须将localhost映射到IPv4本地环回(127.0.0.1)
- 此映射的机制不必总是通过hosts文件
- 在Windows操作系统系统上,它根本没有映射到hosts文件中(解析localhost由DNS解析程序完成)
TL;DR
如何将主机文件重置回默认
更新
根据您的评论更新:
chromedriver版本为97,谷歌chrome版本为96
您的主要问题似乎是您使用的二进制文件版本之间的不兼容在chromedriver=97.0和chrome=96.04664.45之间存在明显的不匹配
解决方案
确保:
- ChromeDriver更新为当前ChromeDriverv96.0级别
- Chrome更新为当前Chrome=96.04664.45(根据Chrome=96.44664.45发布说明)
您可以在WebDriverException中找到相关的详细讨论:消息:未知错误:Chrome无法启动:异常退出"(驱动程序信息:chromedriver=97)使用Selenium Python
看起来您的浏览器版本与您在路径中提供的浏览器二进制文件不匹配。您可以实现WebDriverManager来解决您的问题。
-
为python 安装WebDriverManager模块
pip安装网络驱动程序管理器
-
按以下设置/初始化ChromeDriver服务
//selenium 3 from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) //selenium 4 from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
下面的详细信息->https://cpsat.agiletestingalliance.org/2021/03/25/selenium-webdriver-manager-in-python/