DeprecationWarning:不推荐使用 headless 属性,而是在 Selenium 4.8.0 Python 上使用 add_argument('--headless') 或 add_argument('--headless=new')

Deb*_*anB 14 python selenium headless selenium-chromedriver selenium-webdriver

我正在尝试在无头模式下使用Selenium 4.8.0 Python 客户端执行一个基本程序:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

options = Options()
options.headless = True
s = Service('C:\\BrowserDrivers\\chromedriver.exe')
driver = webdriver.Chrome(service=s, options=options)
driver.get('https://www.google.com/')
driver.quit()
Run Code Online (Sandbox Code Playgroud)

具有以下配置:

  • 硒 4.8.0 Python
  • Chrome _版本 109.0.5414.120(官方版本)(64 位)
  • Chrome驱动程序109.0.5414.25

尽管程序成功执行,但出现 DeprecationWarning 似乎为:

DeprecationWarning: headless property is deprecated, instead use add_argument('--headless') or add_argument('--headless=new')
Run Code Online (Sandbox Code Playgroud)

谁能解释 DeprecationWarning 和所需的更改?

Bri*_*ian 22

headless属性的弃用是在 Selenium 博客文章Headless is Going Away!中宣布的。存档)2023年1月29日。总结及修改建议如下:

\n
\n

无头者即将消失!

\n

Headless 是基于 Firefox 和 Chromium 的浏览器的一种执行模式。它允许用户在无头模式下运行自动化脚本,这意味着浏览器窗口\xe2\x80\x99不可见。在大多数 Selenium\xe2\x80\x99s 绑定中,有一个方便的方法可以在设置浏览器选项时设置此执行模式。但是,Selenium 4.8.0将弃用[原文如此]此方法,现在用户需要在设置浏览器选项时通过参数来设置它。

\n

[...]

\n

从现在开始我该如何设置无头模式?

\n

简而言之,用户可以通过浏览器选项中的参数添加他们想要使用的无头模式。

\n

\n
options = ChromeOptions()\noptions.headless = True\ndriver = webdriver.Chrome(options=options)\ndriver.get(\'http://selenium.dev\')\ndriver.quit()\n
Run Code Online (Sandbox Code Playgroud)\n

\n
options = ChromeOptions()\noptions.add_argument("--headless=new")\ndriver = webdriver.Chrome(options=options)\ndriver.get(\'http://selenium.dev\')\ndriver.quit()\n
Run Code Online (Sandbox Code Playgroud)\n
\n

请参阅完整的博客文章,了解实施此更改的更多背景信息。

\n


Deb*_*anB 9

测试自动化开发人员已经使用Headless ChromeFirefox Headless相当一段时间了,在无头模式下执行自动化脚本,在这种模式下浏览器窗口不可见。这是传统的无头模式,现在变成了旧的无头模式。

使用的片段是:

  • 爪哇

    ChromeOptions options = new ChromeOptions();
    options.setHeadless(true);
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://selenium.dev");
    driver.quit();
    
    Run Code Online (Sandbox Code Playgroud)
  • Python

    options = ChromeOptions()
    options.headless = True
    driver = webdriver.Chrome(options=options)
    driver.get('http://selenium.dev')
    driver.quit()
    
    Run Code Online (Sandbox Code Playgroud)
  • JavaScript

    let driver = await env
      .builder()
      .setChromeOptions(new chrome.Options().headless())
      .build();
    await driver.get('https://selenium.dev');
    await driver.quit();
    
    Run Code Online (Sandbox Code Playgroud)

根据这个Selenium 博客,通过使用无值或有值的开关,这种旧的无头模式仍然可用。这种方便但已弃用的方法将在Selenium 4.10.0中删除--headlessold


将 NativeHeadlessChrome 重命名为新的 Headless

最近 Chromium 团队发布了 Native Headless 模式,现在正式称为新的 Headless模式。此功能已登陆:

通过以下方式得到适当支持:

新语法需要--headless=new作为参数传递,而我们仅--headless在使用 Chrome 自 v96 到 v108 时传递。

示例代码片段:

  • 爪哇

    ChromeOptions options = new ChromeOptions();
    options.addArguments("--headless=new");
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://selenium.dev);
    driver.quit();
    
    Run Code Online (Sandbox Code Playgroud)
  • Python

    options = ChromeOptions()
    options.add_argument("--headless=new")
    driver = webdriver.Chrome(options=options)
    driver.get('http://selenium.dev')
    driver.quit()
    
    Run Code Online (Sandbox Code Playgroud)
  • JavaScript

    let driver = await env
      .builder()
      .setChromeOptions(options.addArguments('--headless=new'))
      .build();
    await driver.get('https://selenium.dev');
    await driver.quit();
    
    Run Code Online (Sandbox Code Playgroud)
  • CSharp

    var options = new ChromeOptions();
    options.AddArgument("--headless=new");
    var driver = new ChromeDriver(options);
    driver.Navigate().GoToUrl("https://selenium.dev");
    driver.Quit();
    
    Run Code Online (Sandbox Code Playgroud)
  • 红宝石

    options = Selenium::WebDriver::Options.chrome(args: ['--headless=new'])
    driver = Selenium::WebDriver.for :chrome, options: options
    driver.get('https://selenium.dev')
    driver.quit
    
    Run Code Online (Sandbox Code Playgroud)