解释:在我们爬虫的过程中经常会遇到参数被加密的情况,这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫,而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS,以及Python执行JS
解释:我们想要找到被加密的内容,肯定先从参数入手,比如页面提交字段{"passwd":"5d114e4f6bdf59e7b9ca20704f1032ef54753c1969b452ba03fea1773c1a49ed6c1e72fb811bd3baccdd29e975e32d4d82f7f215a42ad4b56d561eb6eeb4c3f069936bd58a2c4dadac05fb107c2c94bfbc8efad9cb3649f6581c3d9b228ee1482e7bf39a349eed16dc0fdbb979294c5f73e2c37e489c3fde630ea35dcbe7979b"}
这种一看就是加密了,此时我们打开F12开发者工具,选择选项卡网络,刷新,Ctrl-F搜索关键词passwd
,之后就要靠自己了,点开文件依次查找,找到有用的信息,再卡断点
解释:假设只是你找到了被加密内容调用的位置,此时需要通过加断点运行去验证自己的设想,此时如下图1,先跳去来源面板,之后我们通过图二示例就可以加断点了,图三是(刷新页面或触发该代码)程序运行到断点处时我们要选择的模式其为一行一行运行代码(这个比较常用),图四标准了我们断点运行后,我们能看到的一些局部变量的值
安装:pip install pyexecjs
注意:这个库可能你电脑上有node或者其它js环境,而且执行的js代码,不能包含浏览器里面特有的一些元素,比如window,document等等(我们用python运行js一般也就是计算,遇到这些浏览器元素删除即可)
解释:这个库能够让python执行js代码,下面为简单演示
简单例子:
import execjs
# compile里面写js代码
c = execjs.compile('''
function hello(str){
return "hello" + str;
}
''')
# call第一个参数是函数名,后面的参数对应函数里面的参数,比如这里hello(str)的参数str
d = c.call('hello','jack')
print(d) # hellojack
读取多个js文件:
import execjs
print(execjs.get().name)
with open('./js/test.js', 'r') as f:
jscontent = f.read()
with open('./js/password.js', 'r') as f:
jscontent += f.read()
# jscontent = jscontent + jscontent1
ctx = execjs.compile(jscontent)
d = ctx.call('fuction', 'run')
print(d)