• js2py与PyExecJS搞定python执行javascript代码块/文件


    在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件,比如:爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。

    file

    在python编程中提供了两个非标准库js2py与PyExecJS都能实现在python中运行代码块的效果的。

    1、js2py的使用过程

    js2py适用于js代码少量情况,如果用于很长的混淆的js代码,转译过来的大概率会报错。

    # 使用pip的方式安装: pip install js2py
    

    执行js代码块的方式来运行代码

    import js2py  # 导入js2py处理库
    
    # 创建javascript代码块的python字符串
    
    js_code = '''
          var date = new Date().getTime()   
    '''
    
    调用 js2py.eval_js函数执行javascript代码块
    
    result = js2py.eval_js(js_code)
    
    print(result)
    
    # 1648984478464
    

    执行js文件的方式来运行代码

    # 创建一个javascript文件hello_world.js
    #
    # function hello_world(name){
    # 	return name;
    # }
    
    hello_world = js2py.eval_js(open('./hello_world.js', 'r', encoding='utf-8').read())
    
    print(hello_world("公众号:Python 集中营"))
    
    # 我是 公众号:Python 集中营
    

    2、PyExecJS的使用过程

    通过python代码去执行JavaScript代码的库,依赖于javascript运行环境,最好可以装个node.js,相比于js2py,他可以运行多一点的js代码

    使用pip的方式安装: pip install PyExecJS
    
    import execjs  # 导入execjs处理库
    
    print(execjs.get().name)  # 获取javascript的默认执行环境
    # Node.js (V8)
    

    我的windows上面默认的js环境是nodejs,当然是用操作系统默认的js环境也是OK的。

    执行一下刚刚上面创建的hello_world.js文件。

    # 需要先将即将执行的代码块编译一下
    compile_code = execjs.compile(open('./hello_world.js', 'r', encoding='utf-8').read())
    
    # 使用编译后的代码块call函数调用js文件中的hello_world函数
    result = compile_code.call('hello_world','python')
    
    print(result)
    
    # python
    

    还可以使用eval函数进行调用

    result = compile_code.eval("hello_world('python')")
    
    print(result)
    # python
    

    当然,也可以像js2py一样直接执行js代码块的。

    result = execjs.eval('""+ new Date().getTime()')
    
    print(result)
    # 1648986998002
    

    注意:使用execjs执行javascript代码块时,如果使用中文会出现乱码的情况不能自动转换编码。并且在中/英文混用的时候会出现报错的情况。

  • 相关阅读:
    centos python sh recode command not find的解决办法
    Webmail邮件攻防实战技术总结[转]
    关于c#字符串三种逆转方法及性能比较的另外看法
    随机生成10个含有1万个qq邮箱的文件(Python)
    C#对IE使用Proxy(代理)
    sohu邮箱的联系人获取
    Python 的二进制文件读写需要注意的地方
    hotmail解码遇到的&#解码问题
    利用cookie收取Hotmail信件
    CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\4b49f661\23a749fc\App_Web_default.aspx.cdcab7d2.zii77dc.dll
  • 原文地址:https://www.cnblogs.com/xyou/p/16441902.html
Copyright © 2020-2023  润新知