DeprecationWarning:headless 属性已弃用,请在 Selenium 4.8.0 Python 上使用 add_argument('--headless') 或 add_argument('--headless=new')
- 2025-04-10 09:46:00
- admin 原创
- 21
问题描述:
我正在尝试使用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()
采用以下配置:
Selenium 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')
有人能解释一下 DeprecationWarning 和所需的改变吗?
解决方案 1:
headless
2023 年 1 月 29 日, Selenium 博客文章Headless is Going Away! (存档) 中宣布了该属性的弃用。摘要和建议的更改如下:
无头者正在消失!
Headless 是 Firefox 和 Chromium 浏览器的一种执行模式。它允许用户在无头模式下运行自动化脚本,这意味着浏览器窗口不可见。在大多数 Selenium 绑定中,都有一个方便的方法可以在设置浏览器选项时设置此执行模式。但是,Selenium 4.8.0将弃用此方法,现在用户需要在设置浏览器选项时通过参数进行设置。
[...]
我从现在开始如何设置无头模式?
简而言之,用户可以通过浏览器选项中的参数添加他们想要使用的无头模式。
前
options = ChromeOptions() options.headless = True driver = webdriver.Chrome(options=options) driver.get('http://selenium.dev') driver.quit()
后
options = ChromeOptions() options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) driver.get('http://selenium.dev') driver.quit()
请参阅完整的博客文章,了解有关实施此更改的原因的更多背景信息。
解决方案 2:
测试自动化开发人员已经使用Headless Chrome和Firefox Headless一段时间了,在浏览器窗口不可见的无头模式下执行自动化脚本。这是传统的无头模式,现在变成了旧的无头模式。
使用的片段如下:
Java:
ChromeOptions options = new ChromeOptions();
options.setHeadless(true);
WebDriver driver = new ChromeDriver(options);
driver.get("https://selenium.dev");
driver.quit();
Python:
options = ChromeOptions()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()
JavaScript:
let driver = await env
.builder()
.setChromeOptions(new chrome.Options().headless())
.build();
await driver.get('https://selenium.dev');
await driver.quit();
根据此Selenium 博客,通过使用无值或有值的开关,此旧无头模式仍可用。这种方便但已弃用的方法将在Selenium 4.10.0中删除--headless
old
将 NativeHeadlessChrome 重命名为新的 Headless
最近,Chromium 团队发布了 Native Headless 模式,现在正式称为新 Headless模式。此功能已实现:
Chromium v109.0.5400.0
ChromeDriver v109.0.5414.25
通过以下方式得到恰当的支持:
硒 v4.8.0
新的语法需要--headless=new
作为参数传递,而我们仅--headless
在使用 Chrome v96 到 v108 时传递。
示例代码片段:
Java:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless=new");
WebDriver driver = new ChromeDriver(options);
driver.get("https://selenium.dev);
driver.quit();
Python:
options = ChromeOptions()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
driver.get('http://selenium.dev')
driver.quit()
JavaScript:
let driver = await env
.builder()
.setChromeOptions(options.addArguments('--headless=new'))
.build();
await driver.get('https://selenium.dev');
await driver.quit();
CSharp:
var options = new ChromeOptions();
options.AddArgument("--headless=new");
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://selenium.dev");
driver.Quit();
红宝石:
options = Selenium::WebDriver::Options.chrome(args: ['--headless=new'])
driver = Selenium::WebDriver.for :chrome, options: options
driver.get('https://selenium.dev')
driver.quit
扫码咨询,免费领取项目管理大礼包!