diff --git a/login.py b/login.py index b9c02fc..4d72b8f 100644 --- a/login.py +++ b/login.py @@ -21,7 +21,34 @@ from urllib.parse import unquote import gzip from protobuf.douyin import * import execjs +import execjs._external_runtime as _execjs_external_runtime import hashlib + + +def _patch_execjs_popen_utf8(): + """ + Windows 下 execjs 通过 subprocess.Popen(..., universal_newlines=True) 传 JS 源码时, + 默认会用系统区域编码(如 gbk)编码字符串;h_sign.js 若含泰文等字符会触发 + UnicodeEncodeError。对 execjs 已绑定的 Popen 做包装,强制 UTF-8。 + """ + if getattr(_patch_execjs_popen_utf8, "_done", False): + return + _orig = _execjs_external_runtime.Popen + + def _popen_utf8(*args, **kwargs): + if kwargs.get("encoding") is None and ( + kwargs.get("universal_newlines") or kwargs.get("text") + ): + kwargs = dict(kwargs) + kwargs["encoding"] = "utf-8" + kwargs.setdefault("errors", "replace") + return _orig(*args, **kwargs) + + _execjs_external_runtime.Popen = _popen_utf8 + _patch_execjs_popen_utf8._done = True + + +_patch_execjs_popen_utf8() import urllib.parse from threading import Thread import urllib3 @@ -696,7 +723,8 @@ def zhengchang_ua(i): # wss链接加密 获取 signature def generateSignature(wss): """ - 出现gbk编码问题则修改 python模块subprocess.py的源码中Popen类的__init__函数参数encoding值为 "utf-8" + 若出现 gbk 无法编码 JS 源码:已在文件顶部对 execjs._external_runtime.Popen 做 UTF-8 包装, + 无需再改标准库 subprocess。 """ params = ( "live_id,aid,version_code,webcast_sdk_version," @@ -2265,8 +2293,8 @@ if __name__ == '__main__': # window_html = os.path.join(run_path, 'index', 'main.html') # 在 create_window 中设置 api 对象,以便 JS 访问 - window = webview.create_window('直播管理系统', window_html, js_api=api, min_size=(800, 600)) + window = webview.create_window('直播管理系统', window_html, js_api=api, min_size=(1200, 800)) # 启动 webview。启动后,界面将显示。 # live-management.html 中的 JS 代码应在 DOM 准备就绪且 pywebview api 可用后调用 get_initial_accounts() - webview.start(debug=True) + webview.start(debug=False)