如何检测Chrome浏览器是否无头硒



我正在编写一个selenium测试,无论chrome浏览器是否以无头启动,它都有不同的行为。我的问题是在我的测试中,我如何检测浏览器是否对我的条件流无头?

https://antoinevastel.com/bot%20detection/2018/01/17/detect-chrome-headless-v2.html#:~:text=在%20订单%20到%20自动化%20 chrome,可能%20到+20检测%20 chrome%20无头。

driver.execute_script("return navigator.plugins.length == 0")

考虑这种情况:

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}。但是,当在没有headless选项的情况下运行时,它默认为{'x': 10, 'y': 10}

我使用这个方法来确定我的Chrome实例是否在无头模式下运行,只需执行以下操作:

assert driver.get_window_position()['x'] == 0
assert driver.get_window_position()['y'] == 0

我只是找到了这样的方法。

选项是一个列表,所以你必须找到"--"无头";元素。

opc = Options()
opc.add_argument('headless')

在这种情况下,元素在列表中的位置是[0],因此您只需要执行以下操作:

if (opc.arguments[0]=="--headless"):
print("Do something")

我知道问题是关于Chrome的,但如果你使用的是Firefox,有一个更干净的解决方案(在Firefox 106上测试(:

if driver.caps.get("moz:headless", False):
print("Firefox is headless")

在无头启动chrome实例时,需要将参数"--headless"显式添加到chromeOptions对象中。例如,如果你正在为一个网站编写测试框架,你可能有某种浏览器创建者类,可以为你提供不同的浏览器。为什么不将该参数保存为该类的附加成员呢?

如果你的代码中没有那种工厂设计,另一个更简单的选择就是

options = webdriver.ChromeOptions
options.add_argument("--headless")
print(options.arguments)

相关内容

  • 没有找到相关文章

最新更新