Implement Baishi undelivered-data extraction and restructure menu by site

- Replace Baishi placeholders with full download flow (scan-rate query, export modal, password auth via config.yaml)
- Reorganize router menu into 顺心 / 百世 modules; move undelivered-data compare into 顺心 flow
- Add config.example.yaml and ignore config.yaml to keep credentials out of VCS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-06-16 21:58:02 +08:00
parent 497fd11674
commit ec1a9d9fbc
4 changed files with 113 additions and 38 deletions

View File

@@ -1,15 +1,82 @@
# site_baishi.py
def baishi_expected_download(page):
"""百世:应到货物数据下载"""
print("\n▶ 开始执行【百世 - 应到货物数据下载】任务...")
print("🚧 逻辑开发中 (pass)...")
pass
import os
import yaml
from playwright.sync_api import sync_playwright
def baishi_actual_download(page):
"""百世:实到货物数据下载"""
print("\n▶ 开始执行【百世 - 实到货物数据下载】任务...")
print("🚧 逻辑开发中 (pass)...")
pass
def baishi_download_undelivered_data(page):
"""百世:一键提取应到未到(当日未扫)数据"""
print("\n▶ 开始执行【百世 - 一键提取应到未到数据】任务...")
download_dir = os.path.join(os.getcwd(), "downloads")
if not os.path.exists(download_dir):
os.makedirs(download_dir)
try:
# 1. 导航与页面加载
print(">> 正在进入【扫描综合查询】界面...")
page.locator("div.nav-level1", has_text="基础服务").click()
page.locator("li a", has_text="扫描综合查询").click()
# 验证表格主界面加载完毕
page.get_by_role("tab", name="实时扫描率").wait_for(state="visible")
print("✅ 扫描综合查询界面加载完毕")
# 2. 精准定位并点击【到/接件扫描 -> 当日 -> 未扫】的数字控件
print(">> 正在解析表格,提取当日到件未扫明细...")
# 表头结构复杂,精准定位第一行数据的第 13 列(索引 12
target_cell = page.locator(".ant-table-tbody > tr").first.locator("td").nth(12)
target_cell.locator("a").click()
# 等待下方弹出的明细表格区域加载完毕
detail_section = page.locator(".m-query-all-scanRateDetail")
detail_section.wait_for(state="visible")
page.wait_for_timeout(1000)
# 3. 触发导出设置模态框
print(">> 正在呼出导出配置面板...")
# 锁定在明细区域内的导出按钮,防止误点主表的导出
detail_section.locator(".export-wrap a[title='导出']").click()
# 验证模态框弹出
page.locator(".ant-modal-title", has_text="导出设置").wait_for(state="visible")
# 4. 加载 YAML 配置并输入密码
print(">> 正在读取本地配置文件并进行授权验证...")
password = ""
try:
with open("config.yaml", "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
password = config.get("baishi", {}).get("password", "")
except Exception as e:
print(f" ⚠️ 读取 config.yaml 失败,请确保文件存在且格式正确: {e}")
return
page.get_by_placeholder("请输入登录密码").fill(password)
# 5. 执行最终下载
print(">> 验证就绪,正在触发下载流...")
with page.expect_download() as download_info:
# 精准锁定模态框底部的“导 出”大按钮
page.locator(".ant-modal-footer").get_by_role(
"button", name="导 出"
).click()
download = download_info.value
save_path = os.path.join(download_dir, "百世-应到未到货物数据.xlsx")
# 如果之前已经有同名文件,覆盖保存
if os.path.exists(save_path):
os.remove(save_path)
download.save_as(save_path)
print(f"====================================================")
print(f" 🎉 恭喜!数据提取成功!")
print(f" ⬇️ 文件已落盘: {save_path}")
print(f"====================================================")
print("\n🎉 【百世 - 应到未到数据提取】全流程测试完毕!")
except Exception as e:
print(f"\n❌ 任务执行过程中发生异常: {e}")