前两天抓取某个网页的时候遇到参数和结果被进行加密处理,需要破解这个过程才能拿到最后的结果,但是使用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加密解密,下篇文章再进行阐述。
如果文章中有什么纰漏,各位可以尽情指出,可以相互探讨。
领取专属 10元无门槛券
私享最新 技术干货