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加密卡住了,知识储备不足,求接下来的学习指导
http://mhpic.manhualang.com/comic/D/斗罗大陆拆分版 /597 话 /1.jpg-smh.middle
http://mhpic.manhualang.com/comic/D/斗罗大陆拆分版 /597 话 /2.jpg-smh.middle
http://mhpic.manhualang.com/comic/D/斗罗大陆拆分版 /1 话 /1.jpg-smh.middle
http://mhpic.manhualang.com/comic/D/斗罗大陆拆分版 /1 话 /2.jpg-smh.middle
遍历吧。。。。。
遇到JS加密卡住太正常了,这基本是爬虫进阶的必经门槛。核心思路就一个:别硬刚,要智取。
首先,别死磕逆向。 现在的JS混淆和加密越来越复杂,逆向耗时耗力,还容易被反爬机制搞崩心态。
主流且高效的路线是:
-
优先找“后门”:用浏览器开发者工具的 Network 面板,仔细看每个请求。目标网站的数据很可能通过XHR/Fetch请求获取,其接口(API)返回的往往是结构清晰的JSON数据。直接模拟这些请求,能绕过绝大部分前端加密。这是性价比最高的方法。
-
模拟执行环境:如果数据必须通过执行JS才能生成(比如加密参数
sign),那就用工具来执行JS,而不是自己重写加密逻辑。- 初级选择:
requests-html或Pyppeteer,它们能运行简单的JS。 - 终极武器:
Selenium或Playwright。它们能控制一个真正的浏览器(如Chrome),所有JS都会自动执行,你直接拿最终结果就行。这是对付复杂加密的“重型解决方案”,代码写起来简单,但运行效率相对较低。
- 初级选择:
-
逆向分析(高阶):如果上述方法都无效(比如接口参数被高强度加密),才考虑这条路线。核心是使用
PyExecJS或Node.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 继续下载就行了

