Python调用JS的三种常用方法【学习心得】
在做JS逆向的时候,一种情况是直接用Python代码复现JS代码的功能,达成目的。但很多时候这种方法有明显的缺点,那就是一旦JS代码逻辑发生了更改,你就得重写Python的代码逻辑非常不便。于是第二种情况就出现了,我直接得到你的JS代码片段,用Python去操作JS运行,并得到结果。这种做法的好处在于可以将JS代码看成一个黑盒子,我不关心里面是怎么写的,我只在乎是否输出了正确的结果。
方法一、用Python的pyexecjs库
pyexecjs库允许在Python环境中执行JavaScript代码,无需浏览器环境。在我的另一篇文章中详细讲了pyexecjs库的用法,大家可以去看看哦!
http://t.csdnimg.cn/Eo29Dhttp://xn--pythonpyexecjs-082ha0760esa4358l6pybfnik9rvpff4ap62eee2q
优点:
缺点:
方法二、用Python的selenium库
selenium主要用于Web自动化测试,它可以启动一个真实的浏览器(如Chrome、Firefox等)并模拟用户操作。若要执行JavaScript代码,可以利用execute_script方法。至于如何使用execute_script我这里给出一段参考的代码:
# 导入webdriver模块中的Options类(这里省略了import语句)
chrome_option = Options()
# 设置Chrome浏览器启动选项,使其在无头模式下运行,即不显示用户界面
chrome_option.add_argument("--headless")
# 禁用GPU硬件加速,这对于某些系统在headless模式下运行时是必要的
chrome_option.add_argument("--disable-gpu")
# 忽略SSL证书错误,防止因为证书问题导致的网页加载失败
chrome_option.add_argument('--ignore-certificate-errors')
# 使用前面设置好的Chrome启动选项实例化一个Chrome浏览器对象
browser = webdriver.Chrome(options=chrome_option)
# 定义要访问的网址,并使用浏览器打开该网址
url = "替换成你想要处理的网址"
browser.get(url)
# 在当前页面上执行一段JavaScript代码,并获取其返回结果
result = browser.execute_script("你想执行的JS代码片段")
# 输出执行JavaScript后得到的结果
print(result)
# 暂停程序运行10秒,确保有足够时间进行页面加载或执行后续操作
time.sleep(10)
# 关闭并退出浏览器
browser.quit()
优点:
缺点:
方法三、用node.js搭建一个HTTP API后台服务接口,开放给Python代码调用
首先,在Node.js中创建一个HTTP服务器,并暴露执行JavaScript功能的API。然后,在Python中调用这个HTTP API来执行JavaScript代码。下面介绍Node.js中的一个包express,他可以快速的搭建一个Web服务。
// 导入express包
const express = require("express")
// 创建Web实例
const app = express()
// 设置端口
const port = 3000
// 处理GET请求
app.get('/', function (req, res){
// 获取请求参数
let params = req.query // 获得整个请求参数
let key = req.query.key // 获得某个请求参数,这个key是我从前端自己传入的http://localhost:3000/?key=100
// 返回响应
res.send(`Your query params = ${key}`)
})
// 处理POST请求
// 先设置中间件
app.use(express.json()) // 用于解析JSON格式的请求体
app.post('/', function (req, res) {
// 获取表单数据
let data = req.body // 获得整个表单数据
let name = req.body.name // 获得某个表单数据,这个name是我自己从前端传入的{"name": "wangxin", "age": 18}
// 返回响应
res.send(`Your form data = ${name}`)
})
// 启动服务
app.listen(port, function (){
console.log(`Server is running at http://localhost:${port}`)
})
优点:
缺点:
作者:小oo呆