js逆向-猿人学(7-8)动态字体-图文点选
猿人学爬虫比赛第七题:《动态字体,随风漂移》
地址: http://match.yuanrenxue.com/match/7
召唤师名字是在html 的 script 标签中,字体是从接口中返回。
先请求match/7,然后请求 api/match/7
api/match/7返回的json数据,里面data数组有10个字体(胜点) 和 woff文件的地址。
这种动态字体现在已经有固定的处理方式了,用 python处理字体的库 fontTools。
先保存一份woff字体,查看一下内容。
# -*- coding: utf-8 -*-
# @Author : lx
import base64
import requests
headers = {
'User-Agent': 'yuanrenxue.project',
}
data =requests.get(f'http://match.yuanrenxue.com/api/match/7',headers=headers).json()
woff = data['woff']
with open('7.woff','wb') as f:
f.write(base64.b64decode(woff))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
转成xml查看
from fontTools.ttLib import TTFont
font = TTFont('7.woff')
font.saveXML('7x.xml')
- 1
- 2
- 3
xml文件中 有对应关系, extraNames是按照0-9的顺序排序的。
接下来,把xml中的name提取出来构建一个map,
{undefined
‘unif689’: 0,
‘unia924’: 1,
‘unif637’: 2,
‘unib526’: 3,
‘unic831’: 4,
‘unib348’: 5,
‘unie283’: 6,
‘unib827’: 7,
‘unif145’: 8,
‘unib793’: 9
}
和 json中的进行替换就能获取到需要的数据了。
猿人学爬虫比赛第八题:《图文点选》
地址: http://match.yuanrenxue.com/match/8
这种题和js没什么关系,不过多描述了。
处理点选验证码的逻辑:
1、获取资源文件(需要识别的字、验证码图片)
2、图片处理(二值、去边去线、降噪等)
3、自己训练识别模型或者使用第三方OCR
4、向api发送点击后的请求(一般获取点击位置即可)
抓包可以发现,资源文件都在api中:http://match.yuanrenxue.com/api/match/8_verify
下面查看验证码图片区域:
我按照可点击的像素格进行点击,查看返回结果。
可以看到,提交的 answer就是点击的位置,并且小方格下标为点击的位置。
那么可以自定义一个位置字典,{“字1”:“155”,“字2”:“166”,“字3”:“175”,…}
然后把验证码识别之后的结果和需要点击的字对比,确定好位置,发送验证请求即可。
文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_43582101/article/details/112987961
- 点赞
- 收藏
- 关注作者
评论(0)