如何用Python Requests获取客户端指纹以抓取alfagift.id网站
问题描述
尝试抓取https://alfagift.id网站时,发现该网站依赖https://alfagift.id/_nuxt/f9d159c.js中的FingerprintJS指纹脚本生成的指纹才能访问其他内容。使用Python Requests直接请求该脚本:
resp=requests.get("https://alfagift.id/_nuxt/f9d159c.js") resp.content
仅能获取到脚本函数代码,无法得到实际的指纹值,请问如何用Python获取该指纹?
解决方案
直接用Requests无法获取指纹,因为指纹是浏览器端执行JavaScript动态生成的,Requests仅能获取静态资源,不会运行JS代码。以下是两种可行方案:
方案1:使用支持JS执行的浏览器自动化库(推荐)
用Playwright或Selenium这类工具模拟真实浏览器环境,让JS脚本运行并生成指纹,再提取出来。以Playwright为例:
- 安装Playwright及浏览器:
pip install playwright playwright install chromium
- 编写Python代码获取指纹:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 设置headless=True可无头运行 page = browser.new_page() page.goto("https://alfagift.id") # 等待FingerprintJS执行完成并提取指纹 fingerprint = page.evaluate("""() => { return new Promise(resolve => { const checkInterval = setInterval(() => { // 根据FingerprintJS的实际暴露对象调整判断逻辑 if (window.fp?.visitorId) { clearInterval(checkInterval); resolve(window.fp.visitorId); } }, 100); }); }""") print("获取到的指纹:", fingerprint) browser.close()
方案2:逆向FingerprintJS生成逻辑(难度高)
如果不想用浏览器自动化工具,需要逆向f9d159c.js及依赖的FingerprintJS v3.3.3版本的指纹生成逻辑,在Python中复现所有依赖的浏览器环境参数(如User-Agent、Canvas渲染结果、WebGL信息、时区等),手动计算指纹。但这种方法耗时极长,且网站更新JS后需要重新逆向,不推荐。
注意事项
- 网站可能有反爬机制,需设置合理的User-Agent、请求间隔,模拟真实用户的浏览行为。
- FingerprintJS的指纹生成逻辑依赖多个浏览器环境变量,需确保自动化工具的环境配置尽可能贴近真实浏览器。
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

