在反爬道路上,往往很多时候需要去研究JS代码,像各种ajax接口请求加密,碰到这种我们需要分析js代码,找到前端加密函数。经过千辛万苦,终于在浩瀚的js代码中找到了关键的加密函数。为了能够直接在程序当中执行js函数,往往需要把相关的js函数抠出来,添加到程序张,利用JS引擎去执行js函数。本以为大功告成,窃窃自喜。可是执行后傻眼了。。。程序报错:document is unfined。
这是怎么回事呢?由于js函数当中使用了document对象,而document对象是浏览器引擎的隐含对象,在使用浏览器加载js时会自动构建document对象的。但是不管是python还是java自带的JS引擎并不会构建document对象。这时候你也许会认为,自己定义下document对象不就可以了,但是自定义的DOM对象是个空对象,这样同样会报错,完整DOM树是相当复杂的,如果手动对DOM对象去定义其中变量的话那是不可能的。
这里介绍一种简单直接的方法:通过selenium模拟浏览器去构建DOM树,执行js函数并返回结果。
利用selenium构建DOM树并返回结果
1、利用html文件包装JS代码
2、selenium加载html并立即执行加密函数
3、加密函数结果输出到html标签
4、xpath抓取页面标签元素
具体实现持续更新中,敬请期待!