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脚本日志功能
Aug 14 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python走楼梯问题解决方法示例
Jul 25 Python
python遍历小写英文字母的方法
Jan 02 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
numpy库reshape用法详解
Apr 19 Python
keras 如何保存最佳的训练模型
May 25 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Python爬虫定时计划任务的几种常见方法(推荐)
Jan 15 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登录超时检测功能实例详解
2017/03/21 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
checkbox使用示例
2013/08/23 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
实现Python与STM32通信方式
2019/12/18 Python
python ubplot使用方法解析
2020/01/10 Python
css3的transition属性详解
2014/12/15 HTML / CSS
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
如何使用PHP session
2015/04/21 面试题
大专生简历的自我评价
2013/11/26 职场文书
产品销售员岗位职责
2013/12/18 职场文书
春风行动实施方案
2014/03/28 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
《假如》教学反思
2016/02/17 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
Elasticsearch 基本查询和组合查询
2022/04/19 Python