OSError: [Errno 8] Exec format error using ChromeDriver with Selenium and Linux on Raspberry Pi

OSError: [Errno 8] Exec format error using ChromeDriver with Selenium and Linux on Raspberry Pi

我正在尝试使用 selenium 和 chrome 驱动程序访问网站并与之交互。我从 here 下载了 chrome 驱动程序, 具体来说,我下载了 2.45 版和 linux64 版,因为我在 raspberry pi。我还安装了 geckodriver linux 的 arm 版本。我解压缩了这两个文件并将它们移动到我的 /usr/bin 文件夹,因为那是我的 python 3 路径所在的位置。这是我的代码:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.google.com")

我运行这段代码和我得到的错误信息是

Traceback (most recent call last):
  File "/home/pi/test with selenium.py", line 2, in <module>
    driver = webdriver.Chrome()
  File "/home/pi/.local/lib/python3.5/site- 
packages/selenium/webdriver/chrome/webdriver.py", line 73, in __init__
    self.service.start()
  File "/home/pi/.local/lib/python3.5/site- 
packages/selenium/webdriver/common/service.py", line 76, in start
    stdin=PIPE)
  File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
    raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error

我检查以确保 chrome 驱动程序是一个可执行文件,它是,我通过查看属性和权限知道这一点,它说任何人都可以执行该文件。我尝试安装 homebrew(我不确定我是否做对了)和 运行ning brew install chromedriver,仍然没有用。我在网上阅读的另一个解决方案认为我的操作系统有错误的 chrome 驱动程序文件,但我很确定我有。这是我第一次使用硒,所以希望我没有做错。感谢您的帮助!

这个错误信息...

OSError: [Errno 8] Exec format error

...暗示调用的 ChromeDriver 二进制格式不正确。

您的主要问题是 ChromeDriver 二进制格式与底层 操作系统 [=] 的 不兼容性 61=].

由于您在 Raspberry Pi 上使用 linux64 位版本,因此您需要下载 chromedriver_linux64.tar.gz 来自 chromedriver.storage.googleapis.com,解压它并通过参数 [=42] 提供 GeckoDriver 绝对路径 =]executable_path如下:

from selenium import webdriver

browser= webdriver.Chrome(executable_path='/path/to/chromedriver')

额外考虑

执行额外的清理任务:

  • ChromeDriver 存在于指定位置。
  • ChromeDriver 具有非 root 用户的可执行权限。
  • 通过 IDE 和 [=29] 清理 您的 项目工作区 =]重建你的项目只需要依赖。
  • (WindowsOS only) 使用 CCleaner 工具清除执行您的 测试套件.
  • (LinuxOS only) Free Up and Release the Unused/Cached Memory in Ubuntu/Linux Mint 在你的 Test Suite 执行前后。
  • 系统重启
  • 以非 root 用户身份执行 Test

我终于设法让 chromedriver 在 raspberry pi 上工作了!我做错的第一件事是使用最新版本的 chromedriver(2.45 版),它仅适用于 Chrome 70-72 版。当前(2018 年 12 月)raspberry pi 上可用的 Chromium(开源 Chrome)的最高版本是 65(source). So that meant that chromedriver versions 2.36 - 2.38 SHOULD work, yet they didn't. Why they still gave me that OS Error, I still don't understand. However I found a useful reddit post (yes, reddit) which I will link here. Basically, instead of downloading chromedriver from their offical website I needed to download it from here。这个网站有 arm 的 chromedriver,而不仅仅是 linux 64位。所以我在armhf(更新)中点击了chromedriver 65,并下载了页面右侧看到的.deb文件。然后我双击打开它,我的raspberry pi解压了.deb文件和给了我一个名为 chromedriver 的文件,位于 /usr/lib/chromium-browser。我 运行 sudo mv /usr/lib/chromium-browser/chromedriver /usr/bin 在终端中将 chromedriver 文件移动到我的 python 目录。现在这段 selenium 代码在 python 和 raspberry pi 上完美运行:

from selenium import webdriver driver = webdriver.Chrome()

同样,如果没有有用的 reddit post,我不会解决这个问题,我会再次 link here。我上面描述的所有步骤都在 reddit post 中描述,我只是想把这个词说出来!

我从我的一个旧项目中拿了一个驱动程序。 我遇到了同样的错误。

原来我是想运行 windows chrome驱动在Linux.

我傻了!

Google 的 chromedriver_linux64.zip 仅包含一个 amd64/x86-64 二进制文件,这是这里的根本问题。

对于 Raspberry Pi 用户: 预构建的 ARM64 linux chromedriver 二进制文件可以在 Raspberry Pi 上运行,其他是在大多数 Electron 版本中可用。希望这对您有所帮助。