一、Python执行JS代码--PyExecJS、PyV8、Js2Py

1.1、PyExecJS

  PyExecJS的优点是您不需要照顾JavaScript环境。特别是,它可以在Windows环境中运行,而无需安装额外的库。PyExecJS缺点之一是性能PyExecJS通过文本传达JavaScript运行时,并且运行缓慢。另一个缺点是它不完全支持运行时特定的功能。对于某些用例,PyV8可能是更好的选择。安装之前先安装JS环境,Node.js安装好了,就可以安装接下来的库了。

安装:

pip3 install -i https://pypi.douban.com/simple PyExecJS
import execjs

execjs.get().name # 查看调用的环境 'Node.js (V8)'
ctx = execjs.compile("""
function add(x, y) {
return x + y;
}
""")
print(ctx.call("add", 1, 2)) # with open("enc.js", "r", encoding="utf-8") as f: #执行js文件
js = execjs.compile(f.read())
url = js.call("posturl")
print(url) #http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019115032868

enc.js:

function posturl() {
var s = new Date;
url = "http://www.renren.com/ajaxLogin/login?1=1" + "&uniqueTimestamp=" + s.getFullYear() + s.getMonth() + s.getDay() + s.getHours() + s.getSeconds() + s.getUTCMilliseconds();
return url
}

1.2、PyV8

  PyV8Google V8引擎的Python包装器,它充当PythonJavaScript之间的桥梁?对象,并支持使用python脚本托管Googlev8引擎。和 `PyExecJS` 相比,这个库很轻量,不需要额外装 JS 环境,因为 V8 本身就是环境,同时也因为不需要启动外部环境,执行速度很快。Python3 安装不要使用pip,因为官方只支持 Python2,需要在这里下载对应系统的二进制文件, 然后解压后将 PyV8.py 与 _PyV8.so (如so不是这个名字需要改成这样) 两文件复制到 Pythonsite-packages 目录下,如 /usr/local/lib/python3.6/site-packages

下载地址:

https://github.com/emmetio/pyv8-binaries
import PyV8  # 注意大小写
with PyV8.JSContext() as ctx:
ctx.eval("""
function add(x, y) {
return x + y;
}
""")
print(ctx.locals.add(1, 2)) #

1.3、Js2Py

  将JavaScript转换为Python代码。Js2Py几乎可以翻译和执行任何JavaScript代码。Js2Py用纯python编写,没有任何依赖关系。基本上是纯PythonJavaScript核心的实现。这种方式可以摆脱调用 JS 环境的瓶颈,但遗憾的是如果用于很长的混淆 JS 代码,转译过来的大概率会报错… 所以只建议先尝试一下,如果报错及时更换上面的库。

安装:

pip3 install -i https://pypi.douban.com/simple js2py
import js2py

add = js2py.eval_js("""
function add(x, y) {
return x + y;
}
""")
print(add) # 可以看到大括号里已被转译 #'function add(x, y) { [python code] }' print(add(1, 2)) #
import js2py
# 使用下边这个方法可以输出转译后的代码
# 可以保存到文件里,下次不需要再次转译
print(js2py.translate_js('var x = 1'))
#打印结果:
"""
from js2py.pyjs import *
# setting scope
var = Scope( JS_BUILTINS )
set_global_object(var) # Code follows:
var.registers(['x'])
var.put('x', Js(1.0))
"""

实战技巧:

  接下来就是定位目标网页需要调用的 JS 函数,每个网站的写法都大不相同。只要通过 Debug查看数据从请求,每一步都经过哪些 JS 函数,输出什么样的数据,就可以顺藤摸瓜找到一些可疑的函数,然后将这些方法逐一复制出来,层层去除多余代码,通过上面的库传入参数执行,看是否和目标网页处理后的数据一致,就可以找到目标函数。

17-Python执行JS代码--PyExecJS、PyV8、Js2Py的更多相关文章

  1. 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py

    在使用爬虫中,经常会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求.而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间.这时不要着急使用 S ...

  2. Python执行js之PyexecJs

    利用Python执行js 爬虫中会经常碰到JS加密,当我们找到他加密的JS代码之后我们需要获取它的返回值,python虽然可以模仿js写一个python版本的加密,但是这样有点费时间,也有点费头发~ ...

  3. 用python执行 js代码__来自脚本之家

    "" github地址 :https://github.com/emmetio/pyv8-binaries "" 安装依赖 首先安装依赖:Boost, 这一步网 ...

  4. python3执行js之pyexecjs

    执行js的三种方法:1.阅读js代码,将之转成python2.找到js代码,用python第三方库执行相关代码 python2-pyv8 python3-pyexecjs3.用selenium驱动浏览 ...

  5. pyv8的安装和使用:python中执行js代码

    pyv8 的作用是在python中执行js代码,然后可以使用js里的变量等内容.python取得javascript里面的值.javascript取得python里面的值.python和javascr ...

  6. python 调用js代码

    Python2   安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 c ...

  7. 点击超链接执行js代码实现确认操作

    如题,本次是要实现点击超链接实现执行js代码,并确认是否删除数据库数据,采用php. 首先链接数据库,查询数据库数据: 1: <?php 2: $dbms='mysql'; //数据库类型 ,对 ...

  8. WinForm程序执行JS代码的多种方法以及使用WebBrowser与JS交互

    方法一 使用微软官方组件Interop.MSScriptControl 1.msscript.ocx下载的地址   http://www.microsoft.com/downloads/details ...

  9. UIWebView中Html中用JS调用OC方法及OC执行JS代码

    HTML代码: <html> <head> <title>HTML中用JS调用OC方法</title> <meta http-equiv=&quo ...

随机推荐

  1. Salesforce学习之路-developer篇(五)Aura组件原理及常用属性

    很喜欢曾经看到的一句话:以输出倒逼输入.以输出的形式强制自己学习,确实是高效的学习方式,真的很棒.以下仅为个人学习理解,如有错误,欢迎指出,共同学习. 1. 什么是Lightning Componen ...

  2. unittest加载测试用例名称必须以test开头,是否可以定制化

    ​ 前几天,在一个群里,一个人问了,这样一个问题.说他面试遇到一个面试官,问他,为啥unittest的测试用例要用test 开头,能不能定制化.他不知道为啥. 看到这个题目,我回答当然可以了,可以用l ...

  3. web常用自动化库——selenium总结

    概述 selenium是一个模拟控制浏览器操作的自动化库,它可以做到元素定位,鼠标事件,浏览器事件,js脚本执行等操作 与request不同的是,request是单独请求一个http,而seleniu ...

  4. Java设计模式之单利模式(Singleton)

    单利模式的应用场景: 单利模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例.并提供一个全局反访问点.单利模式是创建型模式.单利模式在生活中应用也很广泛,比如公司C ...

  5. deepin 15.11添加应用启动图标

    以postman为例(路径要按需修改) 1.建立软链接 sudo ln -s /home/lixing/software/Postman/Postman /usr/bin/postman 前面地址为安 ...

  6. Kickstart Round H 2019 Problem B. Diagonal Puzzle

    有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...

  7. jenkins里的定时构建

    1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月的第几天,取值1~31第四个*表示第几月,取 ...

  8. nyoj 975-关于521 (EOF)

    975-关于521 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:46 难度:2 题目描述: Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览 ...

  9. Jmeter使用代理录制web

    Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...

  10. 使用Android Studio进行ndk开发的准备

    1. gradle-ex2. ndk开发包3. 项目目录结构4. lldb调试器 1. 一般来说gradle不是必需的,gradle也是可以进行ndk编译的,然而你需要在编译时使用更多(多于一个)c+ ...