python调用js代码执行

前两天抓取某个网页的时候遇到参数和结果被进行加密处理,需要破解这个过程才能拿到最后的结果,但是使用python破解的时候因为字符编码的问题(也许是这个问题),并没有得到想要的结果,继续解读js代码,发现使用js可以轻松破解。我就想,能不能直接用他的js代码,放在python里来执行拿到结果?然后进行了实验。

开始想到的自然是使用selenium+phantomjs的方式执行,因为在webdriver中有execute_script方法,但是这种方法似乎只能执行加载到浏览器中的js代码,比如js='document.getElementsByClassName("scroll")[0].scrollTop=10000'或者

js ="$('input[id=txtBeginDate]').attr('readonly','')"这样的js代码来操控浏

览器,如果是原声的nodejs代码,比如

这样的js函数,好像webdriver的execute_script不能执行,或者是我没发现它的用法,如果各位知道它的用法,可以私信指导一下。现在我们要说的就是第二种情况,直接执行这样的js函数。

安装pyexecjs,通过这个包可以直接执行js代码,如下如

在js这个字符串里你可以写各种函数,函数之间可以相互调用,最后在call这个函数里传入相应的你要调用的函数名以及参数值,即可执行该js函数,如下

当你的js代码需要用到nodejs的包时,我们需要加入nodejs的路径,前提是你需要安装nodejs,以及配置相应的环境

然后在js代码中加入require该包即可,如下图

crypto和crypto-js都是nodejs的包(可通过npm安装)

写本篇文章的初衷是因为在写爬虫过程中遇到ajax请求,并且参数和响应都被进行加密处理,我们需要解析js代码进行解密,而这个过程使用js解密更方便,所以想到在python中调用js代码的方法。至于中途遇到的AES和DES加密解密,下篇文章再进行阐述。

如果文章中有什么纰漏,各位可以尽情指出,可以相互探讨。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180411G1129100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券