diff --git a/site_shunxin.py b/site_shunxin.py index deae043..6f7b6aa 100644 --- a/site_shunxin.py +++ b/site_shunxin.py @@ -6,6 +6,29 @@ from datetime import datetime import pandas as pd +def _close_tab(page, tab_name): + """关闭指定名称的标签页(Ant Design Tabs)。 + + 通过标签文字定位标签容器,点击其右侧的关闭(×)按钮。 + - tab_name 采用包含匹配,对“ 运单列表”这类带空格的标签同样有效。 + - 关闭失败不会影响主流程,仅打印提示信息。 + """ + try: + tab = page.locator(".ant-tabs-tab").filter( + has=page.get_by_role("tab", name=tab_name) + ) + if tab.count() == 0: + print( + f" ℹ️ 未找到标签页【{tab_name.strip()}】(可能尚未打开或已关闭),跳过。" + ) + return + tab.first.locator(".ant-tabs-tab-remove").click() + print(f" 🗙 已关闭标签页【{tab_name.strip()}】") + page.wait_for_timeout(300) + except Exception as e: + print(f" ⚠️ 关闭标签页【{tab_name.strip()}】时出错: {e}") + + def shunxin_expected_download(page): """顺心:应到货物数据下载""" print("\n▶ 开始执行【顺心 - 应到货物数据下载】任务...") @@ -83,6 +106,11 @@ def shunxin_expected_download(page): else: print("⚠️ 未发现任何运单列表,直接跳转至下载环节。") + # 5. 关闭【运单列表】与【车辆点到】标签页(这两个页面的工作均已完成) + # 运单列表为单一复用标签,所有班次导出完成后统一关闭即可。 + _close_tab(page, "运单列表") + _close_tab(page, "车辆点到") + # 6. 前往数据导出页面去下载 print(">> 正在前往【数据导出】界面...") page.locator("a[href='/dataExport']").click() @@ -191,6 +219,10 @@ def shunxin_expected_download(page): for file_path in downloaded_files: os.remove(file_path) print("✅ 临时数据清理完毕。") + + # 10. 关闭【数据导出】标签页(该页面工作已完成) + _close_tab(page, "数据导出") + print("\n🎉 【顺心 - 应到货物数据下载】全流程测试完毕!") except Exception as e: @@ -245,7 +277,10 @@ def shunxin_actual_download(page): page.get_by_role("button", name="知道了").click() print("✅ 卸车扫描记录导出任务已成功提交!") - # 4. 前往数据导出页面去下载 + # 4. 关闭【卸车扫描记录】标签页(该页面工作已完成) + _close_tab(page, "卸车扫描记录") + + # 5. 前往数据导出页面去下载 print(">> 正在前往【数据导出】界面...") page.locator("a[href='/dataExport']").click() @@ -255,7 +290,7 @@ def shunxin_actual_download(page): page.get_by_role("button", name="search 查询").click() page.wait_for_timeout(2000) - # 5. 轮询任务状态 + # 6. 轮询任务状态 print(">> 列表中已渲染,开始匹配并检查后端处理状态...") while True: rows = page.locator(".ant-table-tbody > tr.ant-table-row") @@ -308,7 +343,7 @@ def shunxin_actual_download(page): print(">> ✅ 目标任务已就绪!开始下载...") break - # 6. 下载逻辑 + # 7. 下载逻辑 downloaded_files = [] for time_str in target_task_timestamps: try: @@ -330,7 +365,7 @@ def shunxin_actual_download(page): except Exception as e: print(f" ❌ 下载任务 [{time_str}] 失败: {e}") - # 7. 合并数据 (修改了文件名前缀) + # 8. 合并数据 (修改了文件名前缀) if downloaded_files: print("\n>> 🧪 正在开始执行数据归档整理...") all_data_frames = [] @@ -353,6 +388,10 @@ def shunxin_actual_download(page): for file_path in downloaded_files: os.remove(file_path) print("✅ 临时数据清理完毕。") + + # 9. 关闭【数据导出】标签页(该页面工作已完成) + _close_tab(page, "数据导出") + print("\n🎉 【顺心 - 实到货物数据下载】全流程测试完毕!") except Exception as e: