Selenium 在没有 root 权限的情况下无法运行,显示 WebDriver 异常:消息:Service /usr/bin/chromedriver 意外退出错误



我有一个在另一个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.0chrome=96.04664.45之间存在明显的不匹配

解决方案

确保:

  • ChromeDriver更新为当前ChromeDriverv96.0级别
  • Chrome更新为当前Chrome=96.04664.45(根据Chrome=96.44664.45发布说明)

您可以在WebDriverException中找到相关的详细讨论:消息:未知错误:Chrome无法启动:异常退出"(驱动程序信息:chromedriver=97)使用Selenium Python

看起来您的浏览器版本与您在路径中提供的浏览器二进制文件不匹配。您可以实现WebDriverManager来解决您的问题。

  1. 为python 安装WebDriverManager模块

    pip安装网络驱动程序管理器

  2. 按以下设置/初始化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/

相关内容

最新更新