统一各站成败反馈信号;修复中通报错卡死与提示框误判
成败信号统一化(顺心/中通/韵达/安能/百世): - 各站 impl 开头清理上次的最终文件,避免无数据/失败时残留旧数据误导比对 - 轮询下载段加汇总校验:下载数 < 预期则 raise,堵住"零/部分下载被判成功" - 正常完成统一显式 return True(原中通/韵达/安能靠 None 隐式成功) - 无数据统一不落文件(安能实到不再落空 xlsx);韵达裸 except 改 except Exception - 中通"票数0无空提示"分支改判失败 中通 bug 修复(site_zto.py): - poll 加 stall 快速失败(连续4轮无进展即 raise)+ 刷新短超时 + 双失败 raise, 避免页面被遮挡时干等 5 分钟才触发重试 - "生成离线导出任务成功"提示所在 iframe 提交后被销毁,wait_for 抛 "Frame was detached" 属正常(提示已随 iframe 消失=任务已建立),改判成功 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -783,6 +783,12 @@ def poll_and_download_tasks(export_cdp, export_times, download_dir):
|
||||
print(f" 已下载 [{idx}/{len(matched)}]: downloads/{save_name} ({fname})")
|
||||
time.sleep(0.3)
|
||||
|
||||
# 汇总校验:下载成功数必须等于本批提交的任务数,否则判失败
|
||||
if len(downloaded_files) < total_expected:
|
||||
raise RuntimeError(
|
||||
f"仅成功下载 {len(downloaded_files)}/{total_expected} 个任务,数据不完整"
|
||||
)
|
||||
|
||||
return downloaded_files
|
||||
|
||||
|
||||
@@ -821,6 +827,15 @@ def merge_and_cleanup(downloaded_files, download_dir):
|
||||
# ====================================================================
|
||||
|
||||
|
||||
def _remove_if_exists(path):
|
||||
"""删除文件(若存在):流程开头清理上次的最终文件,避免无数据/失败时残留旧数据。"""
|
||||
try:
|
||||
if os.path.exists(path):
|
||||
os.remove(path)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def _load_query_days():
|
||||
"""从 config.yaml 读 anneng.query_days,默认 1。"""
|
||||
days = 1
|
||||
@@ -846,6 +861,9 @@ def anneng_expected_download_impl():
|
||||
download_dir = DOWNLOAD_DIR
|
||||
os.makedirs(download_dir, exist_ok=True)
|
||||
|
||||
# 清理上次的最终文件,避免本次无数据/失败时残留旧数据误导比对
|
||||
_remove_if_exists(os.path.join(download_dir, FINAL_FILENAME))
|
||||
|
||||
query_days = _load_query_days()
|
||||
today = datetime.now()
|
||||
start = today - timedelta(days=(query_days - 1))
|
||||
@@ -925,6 +943,7 @@ def anneng_expected_download_impl():
|
||||
time.sleep(0.5)
|
||||
merge_and_cleanup(downloaded, download_dir)
|
||||
print("✅ 安能应到数据下载流程完成。")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ 任务执行过程中发生异常: {e}")
|
||||
@@ -1147,6 +1166,9 @@ def anneng_actual_download_impl():
|
||||
download_dir = DOWNLOAD_DIR
|
||||
os.makedirs(download_dir, exist_ok=True)
|
||||
|
||||
# 清理上次的最终文件,避免本次无数据/失败时残留旧数据误导比对
|
||||
_remove_if_exists(os.path.join(download_dir, ACTUAL_FINAL_FILENAME))
|
||||
|
||||
days = _load_query_days()
|
||||
today = datetime.now()
|
||||
start = today - timedelta(days=days - 1)
|
||||
@@ -1183,8 +1205,9 @@ def anneng_actual_download_impl():
|
||||
print(f" · 总共 {total} 条")
|
||||
if total == 0:
|
||||
print(">> ⚠ 无扫描数据,结束。")
|
||||
_save_actual([], download_dir)
|
||||
return
|
||||
# 无数据:删除残留的旧最终文件(不落空文件),让比对层跳过本站
|
||||
_remove_if_exists(os.path.join(download_dir, ACTUAL_FINAL_FILENAME))
|
||||
return True
|
||||
# 5) 改每页 500 并重新查询
|
||||
print(">> 设置每页 500 条 …")
|
||||
set_page_size_500(cdp)
|
||||
@@ -1203,6 +1226,8 @@ def anneng_actual_download_impl():
|
||||
page_no += 1
|
||||
|
||||
print(f">> 共抽取 {len(all_rows)} 条扫描记录")
|
||||
if total > 0 and not all_rows:
|
||||
raise RuntimeError(f"扫描总数 {total} 但抽取到 0 条记录,翻页抽取异常")
|
||||
_save_actual(all_rows, download_dir)
|
||||
print("✅ 安能实到数据下载流程完成。")
|
||||
finally:
|
||||
@@ -1210,6 +1235,7 @@ def anneng_actual_download_impl():
|
||||
# 7) 关闭扫描查询 tab(用完即关)
|
||||
print(">> 关闭【网点到件扫描查询(新)】tab …")
|
||||
close_tab_by_label(main_cdp, "网点到件扫描查询(新)")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"\n❌ 任务执行过程中发生异常: {e}")
|
||||
return False
|
||||
|
||||
Reference in New Issue
Block a user