当前位置 主页 > 网站技术 > 代码类 >

    Python利用PyExecJS库执行JS函数的案例分析

    栏目:代码类 时间:2019-12-18 12:05

      在Web渗透流程的暴力登录场景和爬虫抓取场景中,经常会遇到一些登录表单用DES之类的加密方式来加密参数,也就是说,你不搞定这些前端加密,你的编写的脚本是不可能Login成功的。针对这个问题,现在有三种解决方式:

    ①看懂前端的加密流程,然后用脚本编写这些方法(或者找开源的源码),模拟这个加密的流程。缺点是:不懂JS的话,看懂的成本就比较高了; ②selenium + Chrome Headless。缺点是:因为是模拟点击,所以效率相对①、③低一些; ③使用语言调用JS引擎来执行JS函数。缺点是:每个JS引擎执行的效果会不一致,导致一些小偏差;   第③种方式中,Python语言能利用的库有PyExecJS、PyV8、Js2Py三种,PyV8使用就报错(我暂时没解决),Js2Py相当于将JS翻译成Pyhton,Js2Py对于复杂JS而言非常容易出错。所以本文主要讨论通过Python语言的PyExecJS库(切换不同的JS引擎)来执行JS函数的过程。

    PyExecJS官网案例

    pip 安装:

    pip install PyExecJS

    Demo:

    import execjs
    
    print(execjs.eval("'red yellow blue'.split(' ')"))
    
    ctx = execjs.compile("""
      function add(x, y) {
       return x + y;
      }
     """)
    print(ctx.call("add", 1, 2))

    输出:

    ['red', 'yellow', 'blue'] 3

    查看JS引擎信息

    # 1.在windows上不需要其他的依赖便可运行execjs, 因为默认有个JScript库,如果要运行其他JS引擎库,就需要另外安装了。
     # windows默认执行的JS环境
      execjs.get().name
      #返回值: JScript
     # 如果想要切换,用os.environ["EXECJS_RUNTIME"] = "XXX",如果刚安装完其他JS引擎,必须配置环境变量,还可能需要重启电脑或重启IDE。
     # 如果windows上装有Node.js , 可以切换Node
      os.environ["EXECJS_RUNTIME"] = "Node"
      print(execjs.get().name)
      #返回值: Node.js (V8)
     # 如果windows上装有PhantomJSs , 可以切换PhantomJS
      os.environ["EXECJS_RUNTIME"] = "PhantomJS"
      print(execjs.get().name)
      #返回值: PhantomJS
     
    # 2.在ubuntu下需要安装执行JS环境依赖, 作者的环境为PhantomJS
      execjs.get().name
      #返回值: PhantomJS
     
    # 3.源码中给出, 可执行execjs的环境:
     PyV8   = "PyV8"
     Node   = "Node"
     JavaScriptCore = "JavaScriptCore"
     SpiderMonkey = "SpiderMonkey"
     JScript  = "JScript"
     PhantomJS  = "PhantomJS"
     SlimerJS  = "SlimerJS"
     Nashorn  = "Nashorn"

    安装PhantomJS步骤

    下载地址:

     http://phantomjs.org/download.html 

    拷贝到脚本到你的Python环境里:

    把下载下来的文件解压,找到目录里.\phantomjs-2.1.1\bin\下的phantomjs.exe,移动到使用的python文件夹下的Script中。

    # 举例 Anaconda3
    D:\programfiles\Anaconda3\Scripts

    添加系统变量:


    D:\programfiles\Anaconda3\Scriptsphantomjs.exe添加到系统变量中。


    验证:

    添加环境变量后,在cmd中验证可以使用phantomjs命令,说明环境搭建好了。


    在python中切换成PhantomJS:

    os.environ["EXECJS_RUNTIME"] = "PhantomJS"

    案例1

    1.访问目标网站的登录页面并查看源码