From 501153a08173ed1209c8f18e281481644789300a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=B9=E5=B0=BC=E5=B0=94?= Date: Wed, 11 Mar 2026 11:17:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=AF=E5=8A=A8=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/main.py | 60 +++++++++++++++++++++++++++-------------------- public/index.html | 25 +++++++++----------- run-docker.sh | 9 +++++++ 3 files changed, 55 insertions(+), 39 deletions(-) diff --git a/backend/main.py b/backend/main.py index bbd126b..318eaa9 100644 --- a/backend/main.py +++ b/backend/main.py @@ -427,42 +427,52 @@ async def check_scan_status( def _slider_form_html(key_val: str, data62_val: str, ticket_val: str) -> str: - """生成滑块表单页:Key、Data62、Original Ticket 已预填,提交到第三方 7765。""" + """本地滑块验证页:与 7765 相同 DOM 结构(#app、keyInput、data62Input、originalTicketInput),加载 7765 的 module 脚本,不用 iframe。""" k = html.escape(key_val, quote=True) d = html.escape(data62_val, quote=True) t = html.escape(ticket_val, quote=True) - action = html.escape(SLIDER_VERIFY_BASE_URL, quote=True) + script_src = html.escape(f"{SLIDER_VERIFY_BASE_URL.rstrip('/')}/assets/N_jYM_2V.js", quote=True) return f""" 滑块验证 - + -
-

滑块验证

-
- - - - - - - -
-

参数已自动填充,点击「开始验证」将提交到第三方滑块服务。

+
+
+
+
+
滑块验证
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
请先填写完整的参数信息
+
+
+
+
+ """ @@ -473,7 +483,7 @@ async def slider_form( data62: str = Query("", description="Data62"), ticket: str = Query(..., description="Original Ticket"), ): - """返回带 Key/Data62/Original Ticket 预填的表单页,提交到第三方 7765,供 iframe 加载并自动填充。""" + """本地滑块验证页:与 7765 同 DOM(#app、keyInput、data62Input、originalTicketInput),加载 7765 的 module 脚本,不用 iframe。""" data62 = _clean_data62(data62) return HTMLResponse(content=_slider_form_html(key, data62, ticket)) diff --git a/public/index.html b/public/index.html index 62711ac..747493f 100644 --- a/public/index.html +++ b/public/index.html @@ -622,13 +622,8 @@
@@ -958,18 +953,20 @@ const d = obj.Data && typeof obj.Data === 'object' ? obj.Data : obj; const stateVal = d.state ?? d.State; - // 后端返回滑块表单页 path(/auth/slider-form?…),iframe 加载后自动填充 Key/Data62/Original Ticket,提交到第三方 7765 + // 后端返回滑块页 path,在新窗口打开(本地页,与 7765 同 DOM 结构 + 加载 7765 的 module 脚本),不用 iframe const sliderUrl = data.slider_url; if (sliderUrl && typeof sliderUrl === 'string') { state.sliderOpened = true; - log('使用第三方滑块(7765),参数已自动填充。', 'warn'); + log('需完成滑块验证,已在新窗口打开验证页。', 'warn'); const sliderCard = $('slider-card'); - const sliderFrame = $('slider-frame'); - if (sliderCard && sliderFrame) { - const iframeSrc = sliderUrl.startsWith('/') ? (API_BASE + sliderUrl) : sliderUrl; - sliderFrame.src = iframeSrc; - sliderCard.style.display = 'flex'; + const openLink = $('slider-open-link'); + const fullUrl = sliderUrl.startsWith('/') ? (API_BASE + sliderUrl) : sliderUrl; + if (sliderCard) sliderCard.style.display = 'flex'; + if (openLink) { + openLink.href = fullUrl; + openLink.target = '_blank'; } + try { window.open(fullUrl, 'slider-verify', 'width=520,height=520,scrollbars=yes'); } catch (e) { log('弹窗被拦截,请点击上方链接打开验证页', 'warn'); } } // state == 2 → 登录成功,跳转后端管理页 diff --git a/run-docker.sh b/run-docker.sh index 54c5df9..78ab977 100755 --- a/run-docker.sh +++ b/run-docker.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# 生产部署脚本:启动前拉取最新代码 → 构建镜像 → 停止旧容器 → 启动新容器 set -e @@ -8,6 +9,14 @@ PORT="${PORT:-3000}" # 数据目录挂载到宿主机,防止容器删除后丢失(SQLite 库 wechat.db 及表数据) HOST_DATA_DIR="${HOST_DATA_DIR:-$(pwd)/data}" +# 启动前自动获取最新代码(与远端 master 一致,丢弃本地修改) +if git rev-parse --git-dir >/dev/null 2>&1; then + echo "Fetching and reset to origin/master..." + git fetch --all && git reset --hard origin/master +else + echo "Not a git repo, skip git fetch/reset." +fi + echo "Building Docker image: ${IMAGE_NAME}..." docker build -t "${IMAGE_NAME}" .