Files
twoJob-demo/scripts/recap_main.py
T
2026-09-03 15:35:23 +08:00

76 lines
3.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""仅重拍主截图 (不触发任何深层点击)。
用途: 修复"数据没加载好就截图 -> 只截到首屏空表"的问题。
现在 fresh_page 内含 settle_content(等 docH 稳定 + 数据就绪), 重拍后
列表/报表页会等到数据渲染完(docH 增长)再整页拼接, 从而截全。
安全: 只做 导航 -> 去遮挡(仅点"立即刷新"/"跳过引导") -> 截图 -> 覆盖原图,
绝不点击 保存/删除/提交/确定/发送 等任何写操作。
用法:
python3 recap_main.py att # 只重拍 18 个有附件的页面
python3 recap_main.py all # 重拍全部 level=2 页面主图
python3 recap_main.py <node_key> # 重拍指定 node_key
"""
import os, sys, time
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from capture_full import capture, ev
from rewalk import fresh_page, SESSION, BASE, dbc, log
MODE = sys.argv[1] if len(sys.argv) > 1 else "att"
def targets(conn):
if MODE == "all":
rows = conn.execute(
"SELECT node_key,name,url,full_path,screenshot_path FROM features "
"WHERE level=2 AND url IS NOT NULL AND url<>'' ORDER BY sort_order,id").fetchall()
elif MODE == "att":
rows = conn.execute(
"SELECT DISTINCT f.node_key,f.name,f.url,f.full_path,f.screenshot_path FROM features f "
"JOIN downloads d ON d.node_key=f.node_key "
"WHERE d.node_key IS NOT NULL AND d.node_key<>'' AND f.url IS NOT NULL AND f.url<>'' "
"ORDER BY f.name").fetchall()
else:
rows = conn.execute(
"SELECT node_key,name,url,full_path,screenshot_path FROM features WHERE node_key=?",
(MODE,)).fetchall()
return [dict(r) for r in rows]
def main():
conn = dbc()
conn.execute("PRAGMA journal_mode=DELETE")
rows = targets(conn)
total = len(rows)
log("=== recap_main mode=%s total=%d ===" % (MODE, total))
ok = fail = 0
for i, r in enumerate(rows):
nk = r["node_key"]; url = r["url"]; rel = r["screenshot_path"]
if not rel:
log("[%d/%d] SKIP no screenshot_path %s" % (i + 1, total, nk)); continue
out_abs = os.path.join(BASE, rel)
log("[%d/%d] %s %s" % (i + 1, total, r["name"], url))
try:
fresh_page(url)
capture(SESSION, out_abs, 16)
conn.execute("DELETE FROM page_shots WHERE node_key=? AND kind='main'", (nk,))
conn.execute(
"INSERT INTO page_shots(node_key,full_path,url,kind,label,path,ts) "
"VALUES(?,?,?,?,?,?,?)",
(nk, r.get("full_path"), url, "main", "主界面", rel,
time.strftime("%Y-%m-%d %H:%M:%S")))
conn.commit()
ok += 1
except Exception as e:
fail += 1
log(" FAIL %s: %s" % (nk, str(e)[:120]))
conn.execute("PRAGMA journal_mode=DELETE"); conn.commit(); conn.close()
log("=== recap DONE ok=%d fail=%d total=%d ===" % (ok, fail, total))
if __name__ == "__main__":
main()