我正在编写一个Selenium测试,根据Chrome浏览器是否以无头模式启动,它具有不同的行为。我的问题是,在我的测试中,如何检测浏览器是否是无头模式,以便进行条件流程控制?
我正在编写一个Selenium测试,根据Chrome浏览器是否以无头模式启动,它具有不同的行为。我的问题是,在我的测试中,如何检测浏览器是否是无头模式,以便进行条件流程控制?
此链接介绍了如何检测Chrome无界面模式。为了自动化测试,一些程序需要使用Chrome无界面模式来执行操作。然而,这种模式很难与真实用户的浏览行为区分开来。本文提供了一些技巧来检测Chrome无界面模式,例如检测User-Agent字符串,检查插件,以及通过WebDriver或DevTools协议来检查不同方面的行为。
driver.execute_script("return navigator.plugins.length == 0")
driver.execute_script("return navigator.webdriver") is True
是正确的方式。 - karlicoss考虑这种情况:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080")
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get_window_position()
返回 {'x': 0, 'y': 0}
。
然而,当没有使用无头选项运行时,默认为 {'x': 10, 'y': 10}
。assert driver.get_window_position()['x'] == 0
assert driver.get_window_position()['y'] == 0
我刚找到了一个方法。
选项是一个列表,所以你需要在里面找到“--headless”元素。
opc = Options()
opc.add_argument('headless')
if (opc.arguments[0]=="--headless"):
print("Do something")
我知道这个问题是关于Chrome的,但如果你正在使用Firefox,有一个更简洁的解决方案(在Firefox 106上测试过):
if driver.caps.get("moz:headless", False):
print("Firefox is headless")
当您以无头模式启动 Chrome 实例时,需要在 chromeOptions 对象中显式添加参数“--headless”。例如,如果您正在编写一个网站的测试框架,那么您可能有一些浏览器创建类,能够为您提供不同的浏览器来使用。为什么不将该参数保存为该类的附加成员呢?
如果您的代码中没有这种工厂设计,另一个更简单的选择就是
options = webdriver.ChromeOptions
options.add_argument("--headless")
print(options.arguments)