Python爬虫如何应对Cloudflare邮箱加密
最近写一个小爬虫,需要拿到邮箱信息,发现拿不到,也不是ajax接口。最后查资料发现是被Cloudflare加密起来了,有加密肯定有解密。
通过大佬https://www.nhooo.com/article/189404.htm得到了加密算法。
参考大佬的原话搞起来就好:
柠之漠然:
这个解密方式就是从那段js代码转换过来的
其中最主要的一句话
for(e=”,r=‘0x'+a.substr(0,2)|0,n=2;a.length–n;n+=2)e+=‘%'+(‘0'+(‘0x'+a.substr(n,2)^r).toString(16)).slice(–2);
前面的2位数字转化成16进制之后就是秘钥,接下来的每两位字符跟秘钥异或操作之后转成16进制,然后转换成字符
最后将所有解出来的字符拼成一起,就得到邮箱abc@abc.com了
js这边是用urlencode的方式
下面是复现的js解密代码:
functionjiemi(val){ for(e='',r='0x'+val.substr(0,2)|0,n=2;val.length-n;n+=2)e+='%'+('0'+('0x'+val.substr(n,2)^r).toString(16)).slice(-2);returndecodeURIComponent(e) }
然后通过python调用js完美搞定:
importexecjs defget_js(): #f=open("./../js/my.js",'r',encoding='utf-8')#打开JS文件 f=open("./jiemi.js",'r',encoding='utf-8')#打开JS文件 line=f.readline() htmlstr='' whileline: htmlstr=htmlstr+line line=f.readline() returnhtmlstr defget_des_psswd(e): js_str=get_js() ctx=execjs.compile(js_str)#加载JS文件 return(ctx.call('jiemi',e))#调用js方法第一个参数是JS的方法名,后面的data和key是js方法的参数 if__name__=='__main__': print(get_des_psswd(e='30515253705152531e535f5d'))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。