美文网首页
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