Python爬虫如何应对Cloudflare邮箱加密


Posted in Python onJune 24, 2020

最近写一个小爬虫,需要拿到邮箱信息,发现拿不到,也不是ajax接口。最后查资料发现是被Cloudflare加密起来了,有加密肯定有解密。

通过大佬https://3water.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解密代码:

function jiemi(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); return decodeURIComponent(e)
}

然后通过python调用js完美搞定:

import execjs

def get_js():
 # f = open("./../js/my.js", 'r', encoding='utf-8') # 打开JS文件
 f = open("./jiemi.js", 'r', encoding='utf-8') # 打开JS文件
 line = f.readline()
 htmlstr = ''
 while line:
  htmlstr = htmlstr+line
  line = f.readline()
 return htmlstr


def get_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'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
Python使用turtule画五角星的方法
Jul 09 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
python3.x上post发送json数据
Mar 04 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python切片列表字符串如何实现切换
Aug 06 Python
python代码实现猜拳小游戏
Nov 30 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
python使用自定义钉钉机器人的示例代码
Jun 24 #Python
pytorch中的weight-initilzation用法
Jun 24 #Python
pytorch查看模型weight与grad方式
Jun 24 #Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 #Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 #Python
python3.x中安装web.py步骤方法
Jun 23 #Python
python如何删除文件、目录
Jun 23 #Python
You might like
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP经典面试题集锦
2015/03/19 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP之header函数详解
2021/03/02 PHP
如何改进javascript代码的性能
2015/04/02 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
基于Vue实现拖拽效果
2018/04/27 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python3实现生成随机密码的方法
2014/08/23 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
python微信撤回监测代码
2019/04/29 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
恶意软件的定义
2014/11/12 面试题
餐饮加盟计划书
2014/01/10 职场文书
物流合作计划书
2014/01/10 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
水电工岗位职责
2015/02/14 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书