什么是「无头浏览器」 (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()