无法在无头模式下启动 Chrome

Unable start Chrome in headless mode

使用 Windows 子系统 WSL2。我正在尝试在 Ubuntu 20.04.

中打开浏览器

按照命令安装 google chrome 和 chrome-driver

https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/

通过终端启动 chrome 时遇到问题。也无法初始化浏览器。

版本:

  1. Windows 10
  2. Ubuntu 20.04
  3. Google Chrome 102.0.5005.61
  4. Chrome驱动程序 102.0.5005.61
  5. selenium-webdriver (4.1.0)
  6. watir (7.1.0)

当我尝试通过终端打开 google-chrome 时。

$google-chrome

Error: [0530/135205.172753:ERROR:exception_handler_server.cc(361)] getsockopt: Invalid argument (22)

$sudo update-alternatives --config x-www-browser


Selection    Path                           Priority   Status
------------------------------------------------------------
 * 0          /usr/bin/google-chrome-stable   200       auto mode
   1          /usr/bin/chromium-browser       40        manual mode
   2          /usr/bin/google-chrome-stable   200       manual mode        
   3          /usr/bin/wslview                30        manual mode

我也尝试在 IRB 中初始化浏览器。

require 'watir'
browser = Watir::Browser.new(:chrome)

Error: Net::ReadTimeout

也尝试重新安装子系统。仍然面临同样的问题。

几个可能的问题:

  • 首先,您提到您使用的是 WSL2,但是您收到的 Chrome 错误让我相信您可能使用的是 WSL1。如果我在 WSL1 上 运行 google-chrome 但在 WSL2 上看不到,我会看到同样的错误。

    Double-check 即 wsl.exe -l -v。您可能需要使用 wsl --set-version <distro> 2.

    将实例转换为 WSL2
  • 其次,运行宁google-chrome那样,即使在WSL2上,也需要X服务器。 Windows 10 中的 WSL 不支持 GUI 应用程序,因此您需要在 Windows 中安装和配置 X 服务器。您会找到关于该主题的其他问题和答案,所以我不会在这里花太多时间,因为您真正的问题是关于 运行ning Chrome headless.

  • 只要你是运行宁 WSL2 你应该能够 运行 Chrome 与 Watir 无头。看起来您缺少的主要内容是没有使用 headless: true 选项调用 Watir for Chrome per this doc.

    以下是我对 Watir 和 Chromedriver 采取的步骤。请注意,第一行是您链接到的方向的固定版本,因为它需要 sudo apt-key add 而不是 sudo curl:

    curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add
    sudo bash -c "echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' >> /etc/apt/sources.list.d/google-chrome.list"
    sudo apt update
    sudo apt install -y google-chrome-stable
    google-chrome --version # To check the Chromedriver version to download
    cd ~
    wget https://chromedriver.storage.googleapis.com/102.0.5005.61/chromedriver_linux64.zip
    
    unzip chromedriver_linux64.zip
    mv chromedriver ~/.local/bin # A directory on your path
    
    gem install --user-install watir 
    
    irb
    

    在 irb 中:

    require 'watir'
    browser = Watir::Browser.new :chrome, headless: true
    browser.goto 'https://whosebug.com/q/72432711/11810933'
    puts browser.title
    

    这里returns你的问题的标题。

    也可以使用 headless 包,如 this page 所述。

    添加以下内容:

    sudo apt install xvfb
    gem install --user-install headless
    

    然后在 irb:

    require 'watir'
    require 'headless'
    
    headless = Headless.new
    headless.start
    
    browser = Watir::Browser.new(:chrome)
    browser.goto 'https://whosebug.com/q/72432711/11810933'
    puts browser.title
    
    headless.destroy