您现在的位置是: 网站首页> 学习笔记> JS逆向 JS逆向
Python调用JS代码
2021-01-04 [selenium] [JS调用] 4841人已围观
常见的JS调用库,及说明
一、PyV8
V8是Google的javascript开源引擎,内置在Chrome浏览器中, 而PyV8则是基于V8引擎开发的Pyhton库,可以通过Python程序调用V8引擎执行JS代码; 但是V8太久未更新,存在内在泄露问题,一些大佬不推荐使用。
二、Js2Py
这是一个python实现的js解释器和翻译器,有bug,性能不高, 对高度混淆的JS会有转换失败的情况,且转换出来的代码可读性较差, 另外这个项目的issues中还有很多bug未修复。
三、PyMiniRacer
一个比较新的V8引擎的一个包装库,继承PyExecJS、PyV8血统。
四、PyExecJS
诞生于Ruby,被移植到Python中,可选择执行引擎,一般情况下会选择NodeJS(安装方便,执行效率高); 但是执行大型JS时还是会有点慢。
引擎选择:
# 第一种方式
os.environ["EXECJS_RUNTIME"] = "Node"
# 第二种方式(临时使用一下)
import execjs.runtime_names
node = execjs.get(execjs.runtime_names.Node)
execjs使用方法
# 第一种
import execjs
result = execjs.eval('xxx') # xxxx为要执行的js代码
# 第二种
import execjs
js_code = """
// 各种js代码
function f(x){
return x + "...";
}
"""
ctx = execjs.compile(js_code)
result = ctx.call("这里可以传参,由x接收")
五、Selenium
一个web自动化测试框架,相当于在浏览器中执行js代码。
js_code = """
需要执行的JS代码
"""
result = browser.execute_script(js_code)
六、Pyppeteer
一个WEB自动化测试框架,是nodejs中谷歌开发的Puppeteer库的Python版本, 性能比Selenium高,支持协程的方式调用。
js_code = """
需要执行的JS代码
"""
result = await browser.evaluate(js_code, *data)
# 如果需要在页面加载前调用JS(可以用来初始化环境)
result = await browser.evaluateOnNewDocument(js_code, *data)
以上方法调用js都有一个问题,就是速度慢,比较好的改进方法是通过nodejs写一个服务接口, 让nodejs执行js代码,我们需要使用的时候直接调用api服务。
另外扣出来js代码经常会遇到一些常见的问题,比如:
1.浏览环境中的window全局对象,在nodejs中是没有的,nodejs中的全局对象是global; 调试时如果报没有window、document、navigate之类的错误,我们可以定义一个window或document对象, 给它们赋个空值,或者把它指向global; 但是这样处理的话又有另一个问题,就是window中的属性什么的不全,不真实, 解决的方法是使用类似jsdom的库,尽量模拟真实环境。
2.window.btoa,将字符串转为base64编码,在nodejs中是不存在这个方法的, 可以使用其它转base64的方法替换,比如:
Buffer.from('xxx需要转base64编码字符串').toString('base64')
看某视频教程做的笔记,有不及之处请大佬多多指教。
文章评论
暂无评论添加评论
点击排行
本栏推荐
标签云
热评文章
- django使用qq邮箱发送邮件
- mysql8设置数据库远程连接
- pip修改下载源为国内源
- win10看不到win7共享的文件夹的解决方法
- SQLyog连接 Mysql 8.0.11 报error no.1251- Client does not support authentic...
- 使用Oracel Net Nanager配置Oracle数据库远程访问
- 将anaconda的下载源切换为国内的源
- Python+selenium+firefox设置代理IP
- selenium+firefox+js实现动态设置firefox浏览器代理IP
- scrapy文件下载(高新技术企业认定网)
- Python调用JS代码
- Chrome浏览器的overrides的使用
站点信息
- 建站时间:2021-01-01
- 网站程序:Django 3.1.2
- 文章统计:53篇
- 文章评论:36条
- 统计数据: