a.JS逆向库
Python 执行 JS 代码
在使用爬虫中,经常会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求。而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间。这时不要着急使用 Selenium 暴力解决,毕竟 Selenium 严重拖慢爬虫效率,我们可以尝试使用一些第三方库,来直接执行前端 JS 代码得到处理过后的结果。
PyExecJS
1、安装PyExecJS
pip install PyExecJS
2、 PyExecJS 示例
import execjs
jsstr = '''
function add() {
let a = 1;
let b = 2;
return a+b;
}'''
# 将js加载进execjs
js = execjs.compile(jsstr)
# call 里面的参数第一个是js函数名称, 如果要执行的js有参数, 后面跟上参数就可以
# 如js.call('add', 2, 3)这样
result = js.call('add')
print(result)
使用execjs的难点并不是在execjs这个库, 而是解析JS的过程, 因为没有浏览器的环境, 没有加密源码的依赖。从成千上万行的JS中择出想要的内容,可能是一段孤零零的JS函数,也可能是从几个JS文件去找出各自找出一段JS代码, 并可以通过execjs顺利执行, 这并非易事。 需要慢慢积累经验。 一旦掌握, 便可以提高爬虫的效率, 以及代码的健壮性, 节省资源!
2、js2py 方法
js2py是一个js的翻译工具,也是一个通过纯python实现的js解释器
js2py中有以下两个比较关键的方法:
方法 | 解释 | 示意 |
---|---|---|
js2py.eval_js(js_string) | 直接运行含有js代码的字符串(或js文件),并得出结果 | js_string='var a=10'js2py.eval_js(js_string) #输出10 |
js2py.EvalJs() | 生成一个EvalJs对象 可通过该对象的execute方法来运行一段js代码(或js文件),并得到对应的变量和对象(即抑制输出,得到变量和对象,便于后续直接使用) 可通过该对象的eval()方法来运行一段js代码,并得到结果 |
js_string='var a=10' js_obj=js2py.EvalJs() js_obj.execute(js_string) js_obj.a #输出为10 |
1、安装js2py
pip install js2py
2、 js2py 示例
import js2py
jsstr = '''
function add() {
let a = 1;
let b = 2;
return a+b;
}'''
content = js2py.EvalJs() # 实例化解析js对象
content.execute(jsstr) # js转python代码
result = content.add()
print(result)
3、PyV8 方法
1、安装PyV8
# 安装Pyv8,下砸对应的二进制版本
# https://github.com/emmetio/pyv8-binaries
# PyV8 是V8引擎的Python语言封装697以上star
2、PyV8 示例
import PyV8
ctxt = PyV8.JSContext()
# ctxt.__enter__()
ctxt.enter()
jsstr = '''
function add() {
let a = 1;
let b = 2;
return a+b;
}'''
result = ctxt.eval(jsstr)
print(result)
4、selenium 方法
1、安装selenium
pip install selenium
2、selenium 示例
from selenium import webdriver
jsstr = '''
function add() {
let a = 1;
let b = 2;
return a+b;
}'''
# 调用js
driver = webdriver.chrome()
# driver.execute_async_script(js)
result = driver.execute_script(jsstr)
print(result)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY