什么是「无头浏览器」 (Headless browser),它有什么应用场景? - 知乎
Chrome Headless模式(一)https://www.cnblogs.com/yimiaoyikan/p/10225849.html
背景:
有个任务的扩展测试点是想确认“无头模式下”请求我们的web-sdk对浏览器是否在线状态的字段上报有无影响,测试结果发现无影响。但使用无头模式请求,发现我们的设备指纹对应的浏览器属性字段会上报Headless字样,如下截图所示

如果在无头浏览器配置了对应浏览器的user-agent,对应字段就不会携带Headles字样,只显示对应浏览器名称,如下图配置为火狐浏览器的user-agent,就会上报Firefox,实际是用的Google浏览器请求。属性都是可以造假的:

备注:无头模式测试前需关闭已打开的google浏览器窗口
测试代码:
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Options # => 引入Chrome的配置
import webbrowser
import time
url = '{上报设备指纹协议地址}'
ch_options = Options()
ch_options.add_argument("--headless") # => 为Chrome配置无头模式
print("开始为Chrome配置无头模式,请关闭所有已打开的Google浏览器")
# ch_options.add_argument("user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'") # => 配置为Google浏览器的user-agent
# ch_options.add_argument("user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0'") => 配置为火狐浏览器的user-agent
# 在启动浏览器时加入配置
driver = webdriver.Chrome(options=ch_options) # => 注意这里的参数
driver.get('{web-sdk地址}')
print("打开了sdk,开始配置")
driver.implicitly_wait(30) # 隐式等待30s
driver.find_element(By.XPATH,"{定位上报数据path的元素}").send_keys("")
print("已配置上报数据path")
time.sleep(2)
driver.find_element(By.XPATH,"{定位初始化的元素}").click()
print("点击初始化")
time.sleep(2)
driver.find_element(By.XPATH,"{定位点击上报数据的元素}").click()
print("点击上报数据")
time.sleep(2)
#只有截图才能看到效果咯
driver.save_screenshot('./web_sdk.png')
webbrowser.open_new(url)
print("结束上报,请检查对应字段是否携带Headles字样")
driver.quit()
文章探讨了无头浏览器的概念,特别是在Chrome的Headless模式下如何影响设备指纹的浏览器属性字段。通过示例代码展示了如何配置无头浏览器的user-agent,以及在改变user-agent后如何影响上报的数据。测试结果显示,尽管无头模式不会影响请求的进行,但会暴露Headless字样在设备指纹信息中,这可以通过设置user-agent来掩盖。
886

被折叠的 条评论
为什么被折叠?



