由于之前没注意蓝色方框提示,一直在琢磨woff字体,一顿操作,掉了一地头发。。。
好了,言归正传
找字体文件
既然题中已给提示,那就按照提示,找字体文件
将base64字符串解码,然后保存成ttf文件
def gen_font(bs64_str):
font_content = base64.b64decode(bs64_str)
with open('./trans.ttf','wb') as f:
f.write(font_content)
找xml标签和数字的映射关系
由于作者mac系统,无法安装fontcreator,所以在此只能对ttf文件转xml,然后读取xml字体信息
def ttf_xml(file_path):
font = TTFont(file_path)
font.saveXML(file_path.split('/')[-1].replace('ttf','xml'))
打开xml文件,由两部分需要注意,一个是GlyphOrder标签,一个是TTGlyph标签,基本都是长这样
我们就是要从这里,找出标签和数字的映射关系。
现在,我们回到页面来看
页面源代码里显示的是59,但是网页上面显示的却是91,很显然是加载字体的缘故,这里我们先将字体中的字先画出来看看,找找其中的关系:
contour标签中的一对对(x,y)坐标点,大胆推测就是用来描绘字体用的,所以我们使用matplotlib将其画出,发现
对应的数字为9,对应的数字为1,
所以对应关系为
至此,字体反爬基本解开了。
注:每一页都得生成新的ttf,产生新的映射关系,然后替换。