如何用Selenium获取网站特定网络请求头(客户端指纹)
解决从alfagift.id获取客户端指纹请求头的问题
一、优化Selenium/seleniumwire的请求捕获方式
你当前用driver.get_log("performance")难以捕获动态生成的指纹请求头,换用seleniumwire的原生请求拦截功能更可靠:
- 先修正依赖导入冲突:同时导入selenium和seleniumwire的webdriver会引发冲突,仅保留seleniumwire的导入即可。
- 直接遍历捕获的请求,筛选目标请求头:
# 安装依赖 !apt-get update !apt install chromium-chromedriver !cp /usr/lib/chromium-browser/chromedriver /usr/bin !pip install selenium seleniumwire # 配置浏览器选项 from seleniumwire import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 禁用自动化检测,避免网站屏蔽 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 启动浏览器并访问目标网站 driver = webdriver.Chrome('chromedriver', options=options) driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") driver.get('https://alfagift.id/') # 遍历所有请求,查找指纹请求头 for request in driver.requests: # 检查请求头中常见的指纹字段(比如fingerprint、x-fingerprint等) if 'fingerprint' in request.headers: print(f"找到指纹请求头: {request.headers['fingerprint']}") # 筛选特定域名的请求,缩小查找范围 if 'alfagift.id' in request.url: print(f"请求URL: {request.url}") print(f"请求头: {request.headers}") driver.quit()
二、直接在浏览器上下文执行JavaScript提取指纹
多数网站的客户端指纹是前端JS生成后添加到请求头的,你可以直接在页面中执行JS获取生成的指纹值:
# 接上前面的浏览器启动代码 driver.get('https://alfagift.id/') # 等待页面加载完成,确保指纹生成脚本执行 driver.implicitly_wait(10) # 执行JS提取指纹(需根据网站实际的JS变量名调整,比如常见的fingerprint、_fingerprint等) fingerprint = driver.execute_script(""" // 需查看网站源码定位指纹存储位置,示例为常见存储方式 return window.fingerprint || window._fp || document.cookie.match(/fingerprint=([^;]+)/)?.[1]; """) print(f"提取到的指纹: {fingerprint}")
三、Java指纹工具转Python的通用思路
如果有Java版的嗅探工具,可按以下步骤转成Python实现:
- 拆解Java工具核心逻辑:明确它是通过抓包解析请求头、Hook浏览器JS,还是计算设备特征(画布、UA、时区等)生成指纹。
- 对应Python实现:
- 抓包部分用
seleniumwire或mitmproxy替代Java的HttpURLConnection/OkHttp。 - JS Hook部分用
selenium的execute_script或pyppeteer的evaluateOnNewDocument实现。 - 设备特征计算:用
user_agent库生成UA,pytz获取时区,PIL生成画布指纹(对应Java的BufferedImage逻辑)。
- 抓包部分用
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

