python-使用selenium在浏览器中执行js代码以实现逆向某些参数
一.selenium和js逆向的简单介绍
1.selenium介绍
简单想象一下,selenium就是你的机器人助手。
-
你的角色:你需要每天在电脑上重复操作浏览器,比如:登录网站、填写表格、点击按钮、下载报告。
-
Selenium 的角色:就是这个机器人助手。
-
你们的关系:你只需要编写一套指令(也就是写代码),告诉机器人第一步做什么、第二步做什么。然后,Selenium 就会自动打开一个真实的浏览器(如 Chrome、Firefox),并严格按照你的指令,完成所有任务。
所以,Selenium 本质上是一个用于 Web 自动化(自动化测试)的强大工具。
2.js逆向介绍。
-
正常买饮料(普通爬虫):你看到可乐的按钮,按下去,售货机就掉出一罐可乐。这就像爬取静态网页,你想要的数据直接写在网页代码里,直接拿就行。
-
JS逆向的情况:这个售货机很特殊,你按可乐按钮,它不会直接出可乐。而是先让你解一个数学题(比如 123 + 456),你必须把正确答案(579)输入旁边的键盘,它才给你可乐。
在这里:
-
你 = 爬虫程序
-
可乐 = 你想爬取的数据
-
数学题 = 网站用 JavaScript 设置的加密参数或算法
-
JS逆向 = 就是你研究明白这个数学题到底是怎么算的,然后让自己的程序也能算出同样的答案。
对新手来说,爬虫 JS 逆向就是:为了拿到被网站用 JavaScript 加密或动态生成的数据,通过技术手段去分析、理解并重现其加密逻辑的过程。
二.灵感
selenium可以控制浏览器,模仿浏览器环境。我们逆向,从前端上扣下来的js代码有时需要我们补环境(也就是需要特定的浏览器环境)。那我们用selenium来在浏览器中执行扣下来的js代码不就正好替我们弥补了前端的环境吗。
三.弊端
- 容易被检测和反制。每次逆向所需的浏览器环境不同,他们都有各自的检测手段,并不一定能适用与该环境。
- 性能效率低。每次都要重新启动浏览器,耗费时间长
- 资源消耗巨大。每个浏览器实例占用数百MB内存,而且无法进行大规模开发
- 而且对于复杂的加密逻辑,selenium也难以处理。
- 简单来说就是:⚡ 性能差 - 比纯代码方案慢10-100倍💰 成本高 - 资源消耗大,维护困难🎯 不稳定 - 容易被检测,脚本易失效🔧 局限性大 - 难以处理复杂加密逻辑
四.结论
我们平时逆向还是建议就正常的扣代码,补环境之类的。在遇到困难突发奇想或想尝试玩玩是可以用一下这个。
五.实例演示
直接将我们扣下来的js代码放在<script>里,然后自己补充需要执行的函数即可。
这就是我们的html代码,接下来用selenium在浏览器中打开它,让它替我们执行。

python代码如下

# 获取sign值
def diver_sign(mdd):
service = webdriver.EdgeService(executable_path=r"D:\software\chrome-win64\chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.maximize_window()
params = {
"X-MS-STUB": mdd
}
driver.get(r'D:\py_code\self-study\抖音\抖音弹幕\dy.html')
time.sleep(1)
ress = driver.execute_script('''
var params = arguments[0];
var ress = {"X-MS-STUB": params["X-MS-STUB"]};
return window._sign(ress);
''', params)
return ress['X-Bogus']
以上便是本期的主要内容了。下一期我会出一个抖音直播间弹幕逆向案例的全流程,也会用到这方法。
代码用途
本代码仅供学习、研究和交流使用,禁止用于任何商业用途或非法用途。使用者应对其行为负责,作者不对代码的滥用或不当使用承担任何责任。
更多推荐



所有评论(0)