平常在浏览网页时会发现有很多网页的文字是无法直接复制的,例如这个:中国供应商网

最新采购-采购中心-中国供应商

其实这就是一种网站自定义的字体,

@font-face{

font-family:

src:

其中font-family就是你自定义的字体名称,而src则是存放字体的路径。

这个网站其实我们可以很清楚的看到是ttf形式的文件,并且采用了base64加密。而后面的那一长串就是经过加密后的文件。所以我们第一步采用base64解码。

bs = base64.b64decode()

将解码后的文件命名并保存

with open("filename.ttf", mode="wb") as f:

f.write()

因为文件是ttf形式的,所以我们需要打开文件并保存为xml形式,

font = TTFont('filename.ttf')

font.saveXML('filename.xml')

第一步就完成了,

我们打开所得到的xml文件后会发现这样一个字段:CharString name="uni1005b",uni1005b会不会就是我们所需要的unicode与字符的对应关系呢。其中有两个字符串引起了我的注意,rlineto和rmoveto。这可能是一种坐标的表示,我们导入reportlab和fontTools.pens来画一下

from fontTools.pens.basePen import BasePen
from reportlab.graphics.shapes import Path
from reportlab.lib import colors
from reportlab.graphics import renderPM
from reportlab.graphics.shapes import Group, Drawing, scale
import base64

fontTools是python的一个对字体进行解析的第三方库,Pen是一个用于标准化的”画”出轮廓的对象,或者是数据和实际轮廓间的媒介。具体来说,Pen对象的子类包含将上述两种轮廓数据转化为画线、移动等模拟实际轮廓的方法。在fontTools的pen库中包含将轮廓数据转化为qt、reportLab等第三方库中实例的Pen子类。总体的思路就是先定义rlineto和rmoveto两种方法,根据坐标画出所有的图,再将画出的图像利用tesseract-ocr识别,就可以找到所有unicode和字符的对应关系了。

class ReportLabPen(BasePen):
    """A pen for drawing onto a reportlab.graphics.shapes.Path object."""

def __init__(self, glyphSet, path=None):
        BasePen.__init__(self, glyphSet)
        if path is None:
            path = Path()
        self.path = path

def _moveTo(self, p):
        (x, y) = p
        self.path.moveTo(x, y)

def _lineTo(self, p):
        (x, y) = p
        self.path.lineTo(x, y)

def _curveToOne(self, p1, p2, p3):
        (x1, y1) = p1
        (x2, y2) = p2
        (x3, y3) = p3
        self.path.curveTo(x1, y1, x2, y2, x3, y3)

def _closePath(self):
        self.path.closePath()

def ttfToImage(fontName, imagePath, fmt="png"):
    font = TTFont(fontName)
    gs = font.getGlyphSet()
    glyphNames = font.getGlyphNames()
    for i in glyphNames:
        if i[0] == '.':  # 跳过'.notdef', '.null'
            continue
        g = gs[i]
        pen = ReportLabPen(gs)
        g.draw(pen)

w, h = g.width, g.width + 500

g = Group(pen.path)
        g.translate(0, 200)
        d = Drawing(w, h)
        d.add(g)
        print(d)
        imageFile = imagePath + "/" + i + ".png"
        renderPM.drawToFile(d, imageFile, fmt)

值得一提的是tesseract-ocr是一个很强大的图片识别工具,安装和使用方法可以自行了解。

关于网站自定义字体css加密篇相关推荐

  1. html css调用自定义字体,css怎么自定义字体样式?

    在CSS中,可以通过@font-face规则来指定一个用于显示文本的自定义字体.@font-face规则允许网页开发者为其网页指定自定义的字体, 通过这种自定义字体的方式,可以消除对用户电脑字体的依赖 ...

  2. html css调用自定义字体,css怎么自定义字体?

    css自定义字体的方法步骤:1.下载所需字体,并将下载的字体文件放入font文件夹中.2.使用css的@font-face规则引入下载的字体即可使用自定义的字体了. css自定义字体的方法详解: 1. ...

  3. 第35篇-某众点评字体CSS加密分析

    提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖! 文章目录 一.基本流程 二.发现woff文件 三.查看woff文件 四.确定woff文件 五.python读取woff 六.分析 ...

  4. 文字05 自定义字体

    自定义字体 CSS3引入的@font-face,让我们为我们的文本引入自定义字体,指定的字体可以从远程服务器或者用户本地安装的字体加载.@font-face规则不仅仅可以使用在CSS的顶层,还可以用在 ...

  5. 控制元素显示和隐藏的方式及区别、内容溢出处理(区域滚动)、透明性、字体图标、常见字体、自定义字体设计、网站图标、CSS代码分析

    元素的显示与隐藏: 常见控制元素的显示和隐藏的属性有display.visibility.overflow,需要清楚的理解三者之间的区别. display显示: 当值为none时为销毁对象,不保留原位 ...

  6. html中css如何引用自定义字体 - 案例篇

    html中css引用自定义字体,实现自定义字体样式效果(含案例) 网页中不同的字体,代码是怎么定义的?怎么引用外来字体文件? html 案例 · 代码如下: <!DOCTYPE html> ...

  7. python爬虫反爬 css 知乎 专栏_python爬虫反反爬 | 像猫眼电影、大众点评等自定义 css 加密字体怎么破?...

    我们上次说了如何建立反反爬 当时还新建一个简单的帅b网页 具体可以戳以下链接 现在你已经知道了对方是 如何自定义字体加密的了 你要想去反反爬 你就要先站在对方的角度去思考问题 有句话这么说来着 &qu ...

  8. html字体整体偏移,CSS自定义字体垂直偏移(错误?)

    ScottS.. 5 你可能没有做错任何事情.以下是一些可能适用的要点,有些可以由您控制,有些则不可以. 只是为了确定,明确设置vertical-align: baseline. 不同的文件(.eof ...

  9. 【前端学习之HTMLCSS进阶篇】-- CSS第一篇 -- @规则与web字体图标

    [前端学习之HTML&CSS进阶篇]- CSS第一篇 - @规则与web字体图标 文章目录 [前端学习之HTML&CSS进阶篇]- CSS第一篇 - @规则与web字体图标 前言 一. ...

最新文章

  1. 如何优雅的使用Mock Server
  2. 2021 4 21 管理心得
  3. 不同型号服务器如何做双击热备,服务器做双机热备教程
  4. Java高并发编程详解系列-Guarded Suspension设计模式
  5. 产品 观察体会微信界面心得(一)
  6. sql server中的架构,模式,用户,角色,登录名,所有者,登录名,dbo之间的关系
  7. 3. Python脚本学习笔记三字符串
  8. 弱网测试究竟要怎么做,才能防止漏测?
  9. activity_manager_server
  10. 出行助手Vue项目中高德API的使用
  11. mysql以及DBeaver的使用
  12. 文化传播有限公司网站源码dian
  13. C#实现压缩与解压缩方案
  14. 如何将网址链接生成在微信可用的网址二维码
  15. c语言中求奇数的简单代码
  16. html5css背景色代码,background css背景
  17. 游戏设计模式之策略模式(二)
  18. 优雅代码 - 业务层代码命名
  19. LoRa与NB各领风骚,激荡百亿级物联网连接
  20. 微机原理第十章 A/D转换与D/A转换

热门文章

  1. 2010北京联合大学计算机答案,2010年、2011年单考单招考试练习题 - 特殊教育学院- 北京联合大学.doc...
  2. 如何让多个div横向排列而不换行
  3. STM32—驱动HC-SR04超声波测距模块
  4. EEG在注意力、记忆方面的原理与应用
  5. 极坐标格式算法(PFA)-SAR成像算法系列(六)
  6. 在php中加css_如何使用php脚本给html中引用的js和css路径打上版本号
  7. 2d 3d旋转和平移的矩阵分析
  8. gomod问题寻不到
  9. 2020 最新MySQL 安装及建议(小白操作)
  10. 新电脑重装系统好吗?电脑重装系统的好坏