Python爬虫学到破解JS加密卡住了,知识储备不足,求接下来的学习指导

已经会 requests,bs4,xpath,框架还不太熟,但 scrapy 也简单用过。 前几天爬了一个漫画站,http://www.shenmanhua.com/douluodalu/597.html 我需要的一段字符串,百度了下,说是没有解密的字符串。。 求接下来的学习路径,是学习 js 吗。(我现在连 python 都还是半吊子,也没有太多精力去学另一个编程语言啊。)

var mh_info = {imgpath: "J+8L+K<+?<+?=+K=+HJ+?=+K;+G:+G=+K?+??+><+K<+>H+><+K;+>>+><+K=+>?+>>+8L;?=+K>+GL+?J+8L"


Python爬虫学到破解JS加密卡住了,知识储备不足,求接下来的学习指导

23 回复

遇到JS加密卡住太正常了,这基本是爬虫进阶的必经门槛。核心思路就一个:别硬刚,要智取。

首先,别死磕逆向。 现在的JS混淆和加密越来越复杂,逆向耗时耗力,还容易被反爬机制搞崩心态。

主流且高效的路线是:

  1. 优先找“后门”:用浏览器开发者工具的 Network 面板,仔细看每个请求。目标网站的数据很可能通过XHR/Fetch请求获取,其接口(API)返回的往往是结构清晰的JSON数据。直接模拟这些请求,能绕过绝大部分前端加密。这是性价比最高的方法。

  2. 模拟执行环境:如果数据必须通过执行JS才能生成(比如加密参数sign),那就用工具来执行JS,而不是自己重写加密逻辑。

    • 初级选择:requests-htmlPyppeteer,它们能运行简单的JS。
    • 终极武器:SeleniumPlaywright。它们能控制一个真正的浏览器(如Chrome),所有JS都会自动执行,你直接拿最终结果就行。这是对付复杂加密的“重型解决方案”,代码写起来简单,但运行效率相对较低。
  3. 逆向分析(高阶):如果上述方法都无效(比如接口参数被高强度加密),才考虑这条路线。核心是使用 PyExecJSNode.js 子进程来调用关键的JS函数,或者用 ast 库对JS代码进行格式化、简化分析。但这需要你耐心调试,定位到生成关键参数的函数片段。

给你的学习建议:

  • 立即转向:系统学习浏览器 Network面板分析Selenium/Playwright 的用法。
  • 后续深入:了解常见的加密方式(如AES、RSA、Base64)和混淆手段,学习使用 Charles/Fiddler 等抓包工具进行移动端APP分析,这常能发现更简单的接口。

一句话总结: 从直接模拟接口请求和控制真实浏览器这两条更实用的路径入手,能快速突破瓶颈。

示例:使用Selenium获取需要JS执行后的页面内容

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 1. 创建浏览器驱动(这里用Chrome,需下载对应chromedriver)
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无头模式,不显示浏览器窗口
driver = webdriver.Chrome(options=options)

try:
    # 2. 访问目标页面
    driver.get("https://你的目标网站.com")
    
    # 3. 等待某个JS渲染后的元素出现(例如,等待商品列表加载)
    wait = WebDriverWait(driver, 10)
    target_element = wait.until(
        EC.presence_of_element_located((By.CLASS_NAME, "product-list"))
    )
    
    # 4. 此时页面已由浏览器完全渲染,JS已执行完毕,直接获取页面源代码
    page_source = driver.page_source
    
    # 5. 接下来就可以用BeautifulSoup或lxml解析page_source了
    # ... (你的解析代码)
    
    print("成功获取渲染后的页面源码")
    
finally:
    # 6. 关闭浏览器
    driver.quit()

这段代码展示了如何用Selenium让浏览器自动完成JS加载和渲染,你拿到的是最终的HTML,自然绕过了前端加密逻辑。

request_html 然后让它渲染 js 解密

瞬间终结

pyv8 直接运行 js 得到结果,看看变量是啥就行了。
之前爬 smzdm 跳转链接居然还是混淆的,也是直接算出来的。

找 js 里调用 mhinfo 的地方,一定有解密方法的,找到之后直接拷贝下来本地 nodejs 搞就行

常见的加密方法 RSA、MD5、BASE64、urlcode、urlencode 都可以 看看

selenium 了解一下

推荐使用 request_html,好用的一批

原来还会慢慢找加密方式,现在懒了直接用 selenium 跑结果了

全局搜索是个好东西,pyexecjs 也是个好东西,两者结合起来就是找到解密部分直接用 python 调用。。

request_html 加载 js 底层是用 pyppeteer, 可以了解一下

base64,urlencode 居然算作加密,可以可以

个人觉得,爬虫的发展方向应该是写越来越稳固,设计能够多机运行,部署简单,数据承载量大的爬虫。
死扣 JS 上升太慢了。MongoDB Hadoop Hbase Redis MQ 这种东西都可以了解了解。
DebugJS 真的费脑子,而且前景有限不方便以后转行。

这只能遍历一种漫画,每一种漫画都是不一样的

萌详细的说说吗?全局搜索

说真的,除非你打算 JS 专精,否则真没必要去研究 JS 破解,这是一条逆向的道路,本身天赋和思路就和搞开发的不一样。再说了,再牛逼的 JS 加密你还不是要进浏览器,我上浏览器内核给你跑一遍,,什么结果不都出来了,无非就是慢一点,可能搜索引擎要求速度特快这个性能无法接受,但是我们自己的爬虫需要这么高的性能吗?

每一章的图片个数有办法获取么,虽然不是事必要获取…

虽然爬虫不能做一辈子,但是也肯定要找好以后的出路…

#14 个人认为爬虫是有两个发展方向的,而且都很极端,区别很大。
一个是广撒网型的,就是你说的这种,问题在于碰到反爬的平台没办法,只能靠其他平台补充。
另一个是精准打击型的,主要是逆向、针对某一个平台的反爬去破解。

#16 打开浏览器的开发者工具,按 ctrl+shift+f ( Chrome-Windows 下),简单难度的 js 直接搜加密参数名就能找到加密函数。

网页源码里有 totalimg:12 就是 12 页 <script>var mh_info={imgpath:“J+8L+K<+?<+?=+K=+HJ+?=+K;+G:+G=+K?+??+><+K<+>H+><+K;+>>+><+K=+>?+>>+8L;?=+K>+GL+?J+8L”,startimg:1,totalimg:12

也可以循环下载 返回 404 的时候跳出 章节+1 继续下载就行了

回到顶部