爱收集资源网

Python验证码模块收集与解决

网络 2023-06-24 11:02

今天在尝试着做验证码相关的研究时,遇到了验证码的搜集问题。

一般,验证码的加载都有着比较复杂的算法和加密在里面,但是笔者昨天见到的验证码却比较辛运,有迹可循。在此,给出本爬虫的相关记录。

注意,文章和代码中均不会给出相关的真实网站的信息,避免不道德的行为。

首先,让我们来看一看该验证码的页面,如下:

验证码示例页面

如果我们尝试着查看该验证码加载时的源代码,会发觉源码如下:

验证码加载的源码

我们可以发觉,该验证码的加载机制也许并不复杂,只是在网址旁边跟了一个时间戳,而这个时间戳,是由JavaScript中的方式形成的,函数内容为new Date().getTime()。

知道了验证码背后加载的原理,那么我们不难通过Python来实现验证码的下载。

可惜的是,上述JS函数形成的时间戳是13位数字,而Python的time.time()方法形成的时间戳为浮点数,小数点前10位,小数点后6位。那么,我们怎么形成符合上述JS函数形成的时间戳呢?

一个简单的看法是,我们让Python来调用JS!真的可以吗?幸运的是,前人早已替我们做好了这个工作,有个神奇的Python第三方模块,叫做PyExecJS。顾名思义,这个模块就是拿来执行JS代码的。

js实现图片放大_js实现表单验证_js实现出现验证码图片

该模块的源码中给出了一个事例,我们可以尝试下,代码如下:

# -*- coding: utf-8 -*-
import execjs
print(execjs.eval("'red yellow blue'.split(' ')"))
ctx = execjs.compile(""" function add(x, y) { return x + y; } """)
print(ctx.call("add", 1, 2))

输出结果如下:

['red', 'yellow', 'blue']3

OK,有了前面的事例,我们就晓得怎样使用该模块了,我们可以轻松地写出下边的代码来下载验证码了:

# -*- coding: utf-8 -*-
import execjsimport urllib.request
js_func = """ function get_milliseconds(){ return new Date().getTime(); } """
ctx = execjs.compile(js_func)result = ctx.call("get_milliseconds")print(len(str(result)))
# 注意,网址已经隐藏url = "http://***/captcha/?%s" % result
urllib.request.urlretrieve(url, "1.png")

下载的验证码如下:

js实现出现验证码图片_js实现图片放大_js实现表单验证

下载的验证码图片

通过我们此次的尝试,发现如下:

本次分享到此结束,感谢你们的阅读~

-END-

已有50万人
领取Python案例实战课

世界正在奖励坚持学习的人!

js实现出现验证码图片
上一篇:微信密码轻松改,一招搞定! 下一篇:没有了
相关文章