没有 root 权限的 Selenium 不会 运行 显示 WebDriverException:消息:服务 /usr/bin/chromedriver 意外退出错误

Selenium won't run without root privileges shows WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited error

我有一个在另一个 python 程序中执行的 selenium 脚本。该程序仅在我以 root 身份使用 ssh 登录服务器时执行,但 www-data 用户无法执行,因为它 returns 出现错误:

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-data 用户身份执行该程序。然而这个错误信息...

selenium.common.exceptions.WebDriverException: Message: Service /usr/bin/chromedriver unexpectedly exited. Status code was: 1

...表示 意外退出。


拇指法则

A common cause for Chrome to crash during startup is running Chrome as root user (administrator) on Linux. While it is possible to work around this issue by passing --no-sandbox flag when creating your WebDriver session, such a configuration is unsupported and highly discouraged. You need to configure your environment to run Chrome as a regular user instead.


此错误背后可能有多种原因。您的代码试验和完整的错误堆栈跟踪会让我们更清楚地了解幕后发生的错误。

但是,一些补救措施如下:

  • 确保 Chrome 更新为当前 chrome=96.0.4664.45 (根据 chrome=96.0.4664.45 release notes)。

  • 确保 Chrome驱动程序 已更新到当前 ChromeDriver v96.0 级别。

  • 确保您已从 download location 下载与您的基础 OS其中:

    • chromedriver_win32: 对于Windows OS
    • chromedriver_mac64: 对于 MAC OS X
    • chromedriver_linux64: 对于Linux OS
  • 使用你需要传递ChromeDriver绝对路径 ] 二进制通过参数 executable_path 并且您需要在单引号(即 '')中提及 path单个正斜杠(即 \)以及原始开关(即 r),如下所示:

    from selenium import webdriver
    
    driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver')
    driver.get(url)
    
  • 确保ChromeDriver二进制文件对非管理员用户具有可执行权限。

  • 非管理员用户身份执行您的测试

  • 错误的另一个潜在原因可能是缺少条目 127.0.0.1 localhost /etc/hosts

    • Windows OS - 添加 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.common.exceptions.WebDriverException: Message: Can not connect to the Service geckodriver 中的讨论:

  • Selenium 不需要 127.0.0.1 localhost 在主机文件中显式设置。
  • 然而,必须将 localhost 映射到 IPv4 本地环回 (127.0.0.1)
  • 这种映射的机制不必总是通过主机文件。
  • Windows OS 系统上它根本没有映射到主机文件中(解析 localhost 由 DNS 解析器完成)。

TL;DR

How to reset the Hosts file back to the default


更新

根据您的评论更新:

chromedriver is at version 97 and google-chrome is at version 96

您的主要问题似乎是您正在使用的二进制文件版本之间 不兼容 chrome 驱动程序之间存在明显的不匹配=97.0chrome=96.0.4664.45

解决方案

确保:

You can find a relevant detailed discussion in WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally." (Driver info: chromedriver=97) using Selenium Python