如何在 wsl2 上从 python3 运行 Selenium ChromeDriver?

Ñho*_*sko 13 selenium google-chrome python-3.x selenium-chromedriver wsl-2

我正在尝试使用 python 3 从 WSL2(Ubuntu 18.04)无头打开 Chrome。

在 Windows 上,我使用的是 Chrome 84。我已经从ChromeDriver - WebDriver for Chrome下载了 Chrome Driver 84 。并在 C:\ChromeDriver\chromedriver.exe 下安装了 .exe

我已经设置了从 Windows Chrome 和 ChromeDriver 到 WSL2 的符号链接:

sudo ln -s '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe' /usr/bin/google-chrome
sudo ln -s /mnt/c/ChromeDriver/chromedriver.exe /usr/bin/chromedriver
Run Code Online (Sandbox Code Playgroud)

两个 Chrome 都设置为可由 WSL2 上的任何用户执行。

在 WSL2 上,当我在控制台中输入时:

google-chrome --use-gl=swiftshader
Run Code Online (Sandbox Code Playgroud)

Chrome 在 Windows 上启动。

这是我的脚本:

from selenium import webdriver
browser = webdriver.Chrome()    # fails
# browser = webdriver.Chrome('/usr/bin/chromedriver') fails
# browser = webdriver.Chrome('/mnt/c/ChromeDriver/chromedriver.exe') fails
browser.get('https://stackoverflow.com')
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

raise WebDriverException("无法连接到服务 %s" % self.path) selenium.common.exceptions.WebDriverException: 消息:无法连接到服务 chromedriver (* OR /usr/bin/chromedriver OR /mnt/c/ ChromeDriver/chromedriver.exe 取决于我如何启动 webdriver.Chrome())

如何能够使用 python3 和 selenium 从 WSL2 启动 Chrome 驱动程序?

小智 8

对于那些还没有找到解决方案的人。按照本教程:WSL2 中的 chromedriver 很多都是相似的,但对我来说,窍门是将 chromedriver 放置在相应的组和用户中:

sudo chown root:root /usr/bin/chromedriver
Run Code Online (Sandbox Code Playgroud)


Bib*_*elo 0

我认为这是不可能的。您这里使用的是 Linux,因此无法使用 Windows 可执行文件。

我尝试使用 Chromium 的无头版本,但它不起作用,因为(看起来)Q

  • 可以按照 Windows 的官方文档从 WSL 2 运行 Windows 可执行文件:[链接](https://learn.microsoft.com/en-us/windows/wsl/interop#run-windows-tools-from-linux )。“WSL 可以使用 [工具名称].exe 直接从 WSL 命令行运行 Windows 工具。例如,notepad.exe...在 WSL 中运行的 Windows 可执行文件的处理方式与本机 Linux 可执行文件类似 - 管道、重定向,甚至后台工作按预期进行。” (2认同)