xzhiwen 2026-03-26 08:38:46 +08:00
parent f34d33e020
commit c2b2102384
1 changed files with 31 additions and 3 deletions

View File

@ -21,7 +21,34 @@ from urllib.parse import unquote
import gzip import gzip
from protobuf.douyin import * from protobuf.douyin import *
import execjs import execjs
import execjs._external_runtime as _execjs_external_runtime
import hashlib 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 import urllib.parse
from threading import Thread from threading import Thread
import urllib3 import urllib3
@ -696,7 +723,8 @@ def zhengchang_ua(i):
# wss链接加密 获取 signature # wss链接加密 获取 signature
def generateSignature(wss): def generateSignature(wss):
""" """
出现gbk编码问题则修改 python模块subprocess.py的源码中Popen类的__init__函数参数encoding值为 "utf-8" 若出现 gbk 无法编码 JS 源码已在文件顶部对 execjs._external_runtime.Popen UTF-8 包装
无需再改标准库 subprocess
""" """
params = ( params = (
"live_id,aid,version_code,webcast_sdk_version," "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') # window_html = os.path.join(run_path, 'index', 'main.html')
# 在 create_window 中设置 api 对象,以便 JS 访问 # 在 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。启动后界面将显示。 # 启动 webview。启动后界面将显示。
# live-management.html 中的 JS 代码应在 DOM 准备就绪且 pywebview api 可用后调用 get_initial_accounts() # live-management.html 中的 JS 代码应在 DOM 准备就绪且 pywebview api 可用后调用 get_initial_accounts()
webview.start(debug=True) webview.start(debug=False)