比影刀官方的好用

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from xbot.web.browser import WebBrowser

import re
import unicodedata
import requests
import io
from fontTools.ttLib import TTFont


class TmallFontDecoder:
    def __init__(self, web_page: WebBrowser):
        self.base_dict = {
            'period': '.',
            'zero': '0',
            'one': '1',
            'two': '2',
            'three': '3',
            'four': '4',
            'five': '5',
            'six': '6',
            'seven': '7',
            'eight': '8',
            'nine': '9',
        }
        self.font_cmap = self._get_font_cmap(web_page)

    def _get_font_cmap(self, web_page: WebBrowser):
        font_face_js = web_page.find_by_xpath('//style[contains(text(), "AlibabaSans102CustomFont")]').get_text()
        pattern = f"url\('(https:\/\/[^']+\.woff)'\)"
        font_url = re.search(pattern, font_face_js).group(1)
        try:
            response = requests.get(font_url)
            response.raise_for_status()
            font = TTFont(io.BytesIO(response.content))
            font_cmap = font['cmap'].getBestCmap()
            return font_cmap
        except Exception as e:
            raise Exception(f'获取字体映射出错: {e}')

    def decode(self, content: str):
        unicode_codes = [ord(c) for c in content]
        decoded_text = ''.join([self.base_dict[self.font_cmap[_]] for _ in unicode_codes])
        return decoded_text


def get_TmallFontDecoder(web_page: WebBrowser):
    return TmallFontDecoder(web_page)


def decode(decoder: TmallFontDecoder, content: str):
    return decoder.decode(content)