feat(sites): auto-screenshot on final download failure for debugging
所有站点 with_retry 在最后一次重试失败、reset 之前自动截图, 保存到 logs/screenshots/。网页站点走 Playwright page.screenshot(), 安能走 CDP Page.captureScreenshot。截图失败绝不阻塞任务流程。 - paths.py: 新增 SCREENSHOT_DIR (BASE_DIR/logs/screenshots/) - runtime.py: 新增 capture_error_screenshot() 工具函数 - .gitignore: 新增 logs/ 忽略规则 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ from datetime import date, datetime, timedelta
|
||||
import yaml
|
||||
from playwright.sync_api import sync_playwright
|
||||
|
||||
from inbound_verify.paths import CONFIG_PATH
|
||||
from inbound_verify.paths import CONFIG_PATH, SCREENSHOT_DIR
|
||||
|
||||
from inbound_verify import state_store
|
||||
from inbound_verify.sites import shunxin, baishi, zto, yunda, anneng
|
||||
@@ -630,6 +630,22 @@ def _apply_ready(site, flags, dates=None):
|
||||
print(f">> [状态] 置就绪态失败 {site}/{k}: {e}")
|
||||
|
||||
|
||||
def capture_error_screenshot(page, site, kind, attempt, error):
|
||||
"""流程失败时截取当前页面,保存到 logs/screenshots/。
|
||||
page: Playwright Page 对象(安能传 None 走 CDP 分支,调用方自行处理)。
|
||||
截图失败绝不外抛——只打告警,不干扰任务重试/清场流程。"""
|
||||
try:
|
||||
os.makedirs(SCREENSHOT_DIR, exist_ok=True)
|
||||
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
err_short = (error or "unknown")[:40].replace("/", "_").replace("\\", "_")
|
||||
fname = f"{site}_{kind}_{ts}_attempt{attempt}_{err_short}.png"
|
||||
path = os.path.join(SCREENSHOT_DIR, fname)
|
||||
page.screenshot(path=path, full_page=False)
|
||||
print(f"📸 【{site}-{kind}】错误截图已保存: {path}")
|
||||
except Exception as se:
|
||||
print(f"📸 【{site}-{kind}】截图失败(不影响任务): {se}")
|
||||
|
||||
|
||||
def _refresh_ready(site):
|
||||
"""入库后立即据 PG 派生并写入该站就绪态(省 30s 心跳等待,与心跳同源)。"""
|
||||
flags, dates = _ready_flags(site)
|
||||
|
||||
Reference in New Issue
Block a user