Python爬虫中遇到JS反爬,除了selenium还有哪些解决方案?

null
Python爬虫中遇到JS反爬,除了selenium还有哪些解决方案?

12 回复

puppeteer


对于JS反爬,除了Selenium还有几个更高效的方案:

  1. 直接调用JS引擎:用PyExecJS或Node.js子进程执行关键JS代码。比如遇到加密参数时,直接抽离网站JS中的加密函数本地执行:
import execjs
with open('encrypt.js') as f:
    ctx = execjs.compile(f.read())
result = ctx.call('getEncryptedParam', 'data')
  1. 逆向分析网络请求:用Chrome开发者工具的Network面板,找到JS最终发送的真实API接口。很多网站的数据其实是通过XHR/Fetch请求获取的,直接模拟这些请求更简单。

  2. 使用Playwright/Puppeteer的无头模式:比Selenium轻量,能生成真实的浏览器环境但资源消耗更小:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(url)
    content = page.content()
  1. 找数据接口的替代源:有些网站有移动端API或遗留的未加密接口,参数更简单。

建议优先尝试逆向真实接口,实在不行再用无头浏览器。

  1. 很多 js 反爬 ,selenium 是解决不了的,大多需要剖析 js,执行 js 代码才能得到有效参数
    2. 各种加密算法,url 中拼接的某些参数是底层算法搞出来的

脱裤啊

JS 爬虫和 Python 有什么关系

还有 puppeteer,也是调用 chrome 来执行 js,但是对用户比较友好。顺便介绍一下爬虫平台 Crawlab,兼容任何框架任何语言的爬虫平台,http://github.com/tikazyq/crawlab

存在 js 反爬也有很多情况呀, 内容加密,token 生成啥的, 你的是哪种啊

也有反 selenium 的

大部分的 js 反爬都可以通过 python 运行 js 来解决,
不过会提这种低质量的问题,
多半也不会这些基本的东西。

那么多 js 还能都运行了?

我只找到了 cookie 加密,还可以怎么找

cookie 加密一般来说相较与参数加密,更难找到入口点,需要很多的调试技巧,比如有时需要 hook,hook 不住的时候如何处理等等,我简书 https://www.jianshu.com/nb/14730171 的几个例子就是基于 nodejs 实现的,如何用 py 运行,只是一个调用方式的问题,不行的话还可以用 node 封装接口,重要的是如何模拟加 /解密

回到顶部