requests+beautifulsoup失败是因为初始html仅含空容器和混淆js(如_0x1a2b变量、atob/string.fromcharcode等),无目标字段;需通过chrome devtools抓包定位getsign等函数,再用pyexecjs(轻量但不支持dom)或playwright(完整浏览器环境)执行。

requests 拿不到真实数据,是因为页面靠混淆 JS 动态生成内容 —— 这类场景不能硬等渲染,得先拆解 JS 逻辑,再用 Python 复现关键计算。
为什么 requests + BeautifulSoup 会失败?
初始 HTML 里通常只有空容器和一段加密/混淆的 <script></script>,比如变量名全被替换成 _0x1a2b、字符串数组拼接、时间戳参与运算、或依赖 document.cookie 动态生成 token。直接解析 HTML 根本找不到目标字段。
怎么定位混淆 JS 的核心逻辑?
打开 Chrome DevTools → Network → 刷页面 → 找 XHR/Fetch 请求 → 点开请求的 Headers 和 Payload → 看有没有带 sign、token、ts、data 这类参数。右键“Reveal in Elements”跳转到对应 <script></script> 标签,再在 Sources 里搜索这些参数名,基本能锁定生成逻辑所在函数(比如 getSign() 或 buildParams())。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 重点关注
eval(、atob(、String.fromCharCode(、split('').map(这类典型混淆手法 - 留意是否依赖当前时间(
Date.now())、随机数(Math.random())、或 DOM 属性(document.title) - 如果用了 WebAssembly 或加密库(如 CryptoJS),Python 复现成本高,优先考虑
PyExecJS或execjs直接运行原 JS
PyExecJS 能跑混淆 JS,但要注意什么?
PyExecJS 是最轻量的 JS 执行桥接方案,适合小段逻辑;但它不支持现代语法(如 const、箭头函数、fetch),且无法访问浏览器 DOM。
- 安装:
pip install PyExecJS,再装 Node.js(它底层调 Node) - 用法示例:
ctx = execjs.compile("function f(a){return a+1;}"); ctx.call("f", 5) - 若 JS 含
window、document,需手动 mock 对象,否则报ReferenceError - 遇到
setTimeout或异步回调,PyExecJS无能为力,必须换Selenium或Playwright
什么时候该放弃解混淆,直接上无头浏览器?
当 JS 逻辑依赖真实浏览器环境(比如 Canvas 指纹、WebGL 渲染、Service Worker、localStorage)、或混淆层过深(多层嵌套 eval + 自执行函数)、或需要模拟滚动/点击触发加载时,硬解就是浪费时间。
-
Playwright启动快、API 稳定、支持自动等待元素,比Selenium更适合高频爬取 - 务必禁用图片加载:
page.set_extra_http_headers({"Accept": "text/html"})+page.route("**/*.{png,jpg,gif}", lambda route: route.abort()) - 避免被识别:启动时加
--disable-blink-features=AutomationControlled,并覆盖navigator.webdriver
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










