- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python爬虫如何应对Cloudflare邮箱加密由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近写一个小爬虫,需要拿到邮箱信息,发现拿不到,也不是ajax接口。最后查资料发现是被Cloudflare加密起来了,有加密肯定有解密.
参考大佬的原话搞起来就好:
柠之漠然:
这个解密方式就是从那段 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解密代码:
1
2
3
|
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完美搞定:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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'
))
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/zy-mousai/p/13172350.html 。
最后此篇关于Python爬虫如何应对Cloudflare邮箱加密的文章就讲到这里了,如果你想了解更多关于Python爬虫如何应对Cloudflare邮箱加密的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
本文分享自华为云社区《【沃土方案--金融】银丰新融-反洗钱自主监测系统(一)》,作者:HuaweiCloudDeveloper 。 “三反(反洗钱、反恐怖融资、反逃税)”意见持续深化落实,第四轮互评估
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我们有一个数据驱动的 Activity ,它构建了一大组(通常最多 100 个)类似按钮的组件,并将它们放在一个 Scrollable 中。每个按钮都是从资源中膨胀的,并且基于 RelativeLay
我在一个非常早期的项目中使用 Hibernate EntityManager 和 Hibernate Annotations for ORM。该项目需要尽快启动,但规范不断变化,我担心系统将启动并收集
这是一个来自 SPOJ 的简单编程问题:http://www.spoj.com/problems/PROBTRES/ . 基本上,您需要输出 i 和 j 之间数字的最大 Collatz 循环。 (
由于 C++11 引入了新的统一初始化语法,许多人建议使用它来代替旧式语法。至少,如果不是这个所谓的极端情况: struct Foo { Foo(int){ std::cout
Log4J2漏洞涉及的影响太广了,昨天发文后很多粉丝留言问Spring Boot项目是否受到Log4J2漏洞影响。Spring官方已经全面进行了排查,现在大家可以知道这些信息和应对方法。 默认
我正在通过 UDP(视频数据)接收 RTP。 RTP 包含我需要解码的 H264。不幸的是,大多数 RTP 都包含零散的数据。由于缺少 RTP 序列,我无法正确重建 H264。 关于如何减少数据丢失以
我正在阅读 this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle 的算法可能会播放和取消同步发送的数据。 我想知道这一点,因为我看到很多代码示例,客户端首先发送数
我正在创建一个简单的应用程序,它将使用react-native-firebase和react-native-maps。按照安装文档的说明,我已经启动并运行了 map ,没有任何问题。接下来,我已经安装
我是一名优秀的程序员,十分优秀!