脚本实现登陆滑块
仅供学习参考,简单操作
你知道吗,滑动验证码居然是为了验证人类比机器人蠢而设计的。
你以为自己快速、准确地滑动拼图、对齐图案,才被允许通过,系统还说你超越了99%的用户,夸你“比闪电还快”,但实际上,机器人画得比你又快又好,系统觉得你“这么笨,肯定不是机器人”,才通过验证。
很多得知此消息的网友表示“谢谢有被侮辱到”“显得我以前小心翼翼对准的样子很心酸”。
部分代码展示:
with open('./test.js', 'r', encoding='utf-8') as f:
js_code = f.read()
ctx = execjs.compile(js_code)
headers = {
'Origin': 'https://login.dangdang.com',
'Referer': 'https://login.dangdang.com/?returnurl=https%3A%2F%2Fwww.dangdang.com%2F',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
}
# 判断缺口位置 返回缺口的X坐标
def identify_gap(bg,tp,out):
'''
bg: 背景图片
tp: 缺口图片
out:输出图片
'''
# 读取背景图片和缺口图片
bg_img = cv2.imread(bg) # 背景图片
tp_img = cv2.imread(tp) # 缺口图片
# 识别图片边缘
bg_edge = cv2.Canny(bg_img, 100, 200)
tp_edge = cv2.Canny(tp_img, 100, 200)
# 转换图片格式
bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
# 缺口匹配
res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配
# 绘制方框
th, tw = tp_pic.shape[:2]
tl = max_loc # 左上角点的坐标
br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标
cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形
cv2.imwrite(out, bg_img) # 保存在本地
# 返回缺口的X坐标
return tl[0]
# 调整底图大小并保存
def resize_and_save_image(path ,content, size):
image = Image.open(BytesIO(content))
image = image.resize(size)
image.save(path)
解析
该文件实现了一个用于登录系统的脚本,结合了图像处理和网络请求。
-
导入模块:
- 使用
PIL
处理图像,requests
进行HTTP请求,execjs
执行JavaScript代码,cv2
进行图像处理。
- 使用
-
加载JavaScript代码:
- 从
.js
文件中读取并编译JavaScript代码,使用execjs
运行。
- 从
-
设置HTTP头部信息:
- 定义了请求头,包括
Origin
、Referer
和User-Agent
,模拟浏览器请求。
- 定义了请求头,包括
-
主要函数:
-
identify_gap(bg, tp, out)
: 使用OpenCV识别图像中的缺口位置,并绘制矩形框。 -
resize_and_save_image(path, content, size)
: 调整图像大小并保存。 -
ranKey(data)
: 获取随机密钥。 -
getSlidingVerifyCode(data)
: 获取滑动验证码。 -
save_captcha_img(url)
: 保存验证码图片。 -
checkSlidingVerifyCode(data)
: 校验滑动验证码。 -
accountLogin(data)
: 模拟登录。
-
-
主程序流程:
-
获取用户名和加密后的密码。
-
获取请求参数和随机密钥。
-
获取滑动验证码并保存相关图片。
-
识别缺口位置,生成点信息。
-
校验滑动验证码,并发送最终登录请求。
-