美文网首页
python调用js代码---PyV8

python调用js代码---PyV8

作者: 玩阿轲睡妲己 | 来源:发表于2017-12-11 16:39 被阅读0次

背景:爬某网站数据。需要携带参数发POST请求,参数在网页js中,js太复杂,不便用python模拟。所以直接用python执行js函数,得到参数。

PyV8执行js获取参数.png
  • 导入包
import PyV8
  • 创建一个jsContext对象并进入
ctxt = PyV8.JSContext()
ctxt.enter()
  • eval一下想要执行的js的代码,或者包含你需要的js代码的源文件
ctxt.eval(""" function createGuid() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid(); """)
  • 接下来就可以使用这个ctxt来执行js脚本了
  • 建议使用 with 语句
>>> with PyV8.JSContext() as ctxt:
...     ctxt.enter()
...     print ctxt.eval(""" function createGuid() {return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);}createGuid() + createGuid() + "-" + createGuid() + "-" + createGuid() + createGuid() + "-" + createGuid() + createGuid() + createGuid(); """)
...
58076022-485c-70707e9f-2e4e2d2e055e

Python 和 Js 之间的变量交互

  • Python 取 Js 里面的值
import PyV8
with PyV8.JSContext() as env1:
    env1.eval("""
                var_i = 1;
                var_f = 1.0;
                var_s = "test";
                var_b = true;
            """)
    vars = env1.locals
    var_i = vars.var_i
    print var_i
  • Js 取 Python 里面的值
import PyV8
with PyV8.JSContext() as env1:
    env1.securityToken = "foo"
    env1.locals.prop = 3
    print int(env1.eval("prop"))

相关文章

网友评论

      本文标题:python调用js代码---PyV8

      本文链接:https://www.haomeiwen.com/subject/rdoiixtx.html