ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

cli-anything-web-yu-pri:用 CLI 与 Playwright 驱动日本邮政 Web Yu-pri 报关内容表单的 Agent 实战指南

cli-anything-web-yu-pri:用 CLI 与 Playwright 驱动日本邮政 Web Yu-pri 报关内容表单的 Agent 实战指南 cli-anything-web-yu-pri用 CLI 与 Playwright 驱动日本邮政 Web Yu-pri 报关内容表单的 Agent 实战指南【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-AnythingWeb Yu-priWeb ゆうプリ是日本邮政面向登录用户的 Web 标签录入应用其「内容品目contents行录入」高度重复。cli-anything-web-yu-pri 以https://mgr.post.japanpost.jp/C30P01Action.do为入口通过 Playwright 驱动真实浏览器 UI把「登录、巡检、截图、dry-run 规划、内容表单填写」全部封装为结构化 CLI 命令让 LLM Agent 能够安全、可验证地完成申报内容的自动化录入。读完本文你将掌握该技能的安装方式、命令语义、Items 文件规范、选择器诊断方法以及源码层面的填报流程与安全边界。一、设计背景为什么用 CLI 驱动真实浏览器而不是重写业务逻辑Web Yu-pri 是一个需要登录的 Web 应用业务逻辑校验、计费、运单号生成完全在服务端闭环。cli-anything-web-yu-pri 没有尝试在本地重新实现日本邮政的报关逻辑而是把「浏览器里的人肉操作」转化为「可被 Agent 调用的 CLI 原语」。这一设计在仓库的 SOP 文档 WEB_YU_PRI.md 中被明确概括为This harness turns Japan Posts Web Yu-pri browser workflow into an agent-friendly CLI. Web Yu-pri is a logged-in web application, so the CLI drives the real browser UI through Playwright instead of reimplementing Japan Post business logic.关键技术事实见 core/browser.py官方起始 URL登录页https://mgr.post.japanpost.jp/C30P01Action.do已知内容表单 URLhttps://mgr.post.japanpost.jp/M060800.do浏览器引擎Playwright Chromium配合持久化用户 Profilepersistent profile用户在 Profile 中手动登录一次之后 CLI 复用会话凭据策略CLI 从不接收、也从不存储账号密码这套「真实浏览器 持久化 Profile 结构化命令」的组合正是本技能能够既自动化、又保持账号安全的关键。二、安装与环境准备技能本身是一份 Agent Skill 元数据其对应 Python 包为cli-anything-web-yu-pri版本 0.1.0见 setup.pyPython 要求3.10核心依赖为click8.1,9.0与playwright1.45,2.0。pip install githttps://github.com/HKUDS/CLI-Anything.git#subdirectoryweb-yu-pri/agent-harness如果本机没有可用的浏览器执行python -m playwright install chromium也可以安装 Microsoft Edge 或 Chrome 后通过--browser-channel msedge或--browser-channel chrome指定通道。从 browser_session 的实现 可以看到启动回退顺序显式指定的 channel →msedge→chrome→ Playwright 内置 chromium每个通道都会附加--disable-blink-featuresAutomationControlled参数以减少自动化痕迹全部失败时才报错并汇总各通道错误。安装后建议先跑一次体检命令确认 Playwright 与 Profile 路径状态cli-anything-web-yu-pri doctordoctor会返回profile_dir、login_url、contents_url与playwright_available等信息实现见 browser.py。默认 Profile 目录为~/.cli-anything-web-yu-pri/profile可用全局参数--profile-dir覆盖。三、安全规则Agent 自动化的红线技能文档SKILL.md规定了四条必须遵守的安全规则这些规则不只是使用建议在源码层同样有对应落实不要把日本邮政凭据写入命令、文件、日志或 Prompt。CLI 的凭据模型决定了它根本不接受密码参数登录只发生在浏览器 Profile 内的人工操作中。使用open-login让用户先在持久化 Profile 中手动登录之后所有命令复用该登录会话。真实填写之前必须先执行contents fill ... --dry-run --json做离线验证。CLI 不点击最终的出货确认/购买按钮。contents fill在填完内容品目与申报总价后即停止JSON 输出的safety对象中final_submit_clicked恒为false见 fill_contents 的返回值。当源数据存在独立的奖项/类别行时保持逐行独立同时保留用户请求的申报总价对应--total-value覆盖机制见第五节。这套安全模型在 WEB_YU_PRI.md 中被总结为第一版只自动化「重复性数据录入」填写内容包括品目行、申报总价、可选包装类型与危险品标志但绝不触碰最终提交按钮。四、命令总览与--json机器可读输出全局参数--json让所有命令输出结构化的 JSON专为 Agent 消费设计默认人类可读输出则由emit/fail统一格式化见 web_yu_pri_cli.py。错误时--json模式输出{error: ..., type: 异常类型名}并退出码 1。技能文档给出的常用命令组合cli-anything-web-yu-pri --json doctor cli-anything-web-yu-pri open-login cli-anything-web-yu-pri --json status --url https://mgr.post.japanpost.jp/M060800.do cli-anything-web-yu-pri --json plan items.json cli-anything-web-yu-pri --json contents fill items.json --dry-run cli-anything-web-yu-pri --json contents fill items.json --total-value 17000完整子命令清单对应 README.md 与 CLI 实现命令作用doctor检查本地运行时与 Profile 路径selectors打印已知的 Web Yu-pri 选择器映射表plan items-file校验 JSON/CSV/TSV 品目文件并计算总额open-login在持久化 Profile 中打开登录/起始 URLstatus打开 URL 并报告标题、当前 URL 与选择器存在性snapshot -o page.png截取页面截图可附带 HTML 快照contents fill items-file填写内容品目行与申报总价repl启动一个交互式小 REPL 便于逐条执行上述命令各命令的关键选项见 web_yu_pri_cli.pyopen-login--url默认登录 URL、--headless、--browser-channel、--wait/--no-wait保持浏览器开启直到按回车默认人类输出时开启、--json时关闭status--url、--headless、--browser-channelsnapshot--url、-o/--output必填 PNG 路径、--html-output可选 HTML dump、--headless、--browser-channelcontents fill--url默认内容表单 URL、--country-default、--total-value、--value-mode、--package-type、--danger/--no-danger、--dry-run、--headless、--browser-channel、--delay-ms默认 500每条品目添加后的等待毫秒数open-login默认人类输出下会进入交互会话打开页面后提示「Log in or inspect the page, then press Enter here to close the browser」用户在真实浏览器窗口完成登录回车后关闭会话--json模式下则直接打开即返回不阻塞等待。五、Items 文件JSON/CSV/TSV 输入规范与字段别名技能把「一次申报的内容品目」建模为一个独立的输入文件。JSON 格式{ items: [ {description: Award plaque, value: 8000, quantity: 1, country: KR}, {description: Certificate, value: 9000, quantity: 1, country: KR} ] }顶层items为数组每个元素是一个品目对象也允许直接传品目数组_load_json同时支持 dict 与 list 两种载荷见 items.py。CSV/TSV 则要求含表头的首行并按后缀自动选择分隔符CSV 用逗号、TSV 用制表符。CSV 表头支持丰富的别名技能文档中的别名清单与 items.py 完全一致语义可用别名description品目描述description、desc、content、contents、item、name、pkgvalue金额value、declared_value、cost、price、amount、yen、jpyquantity数量quantity、qty、num、countcountry原产国country、country_code、country_of_origin、origin、couCd、cou_cdHS code海关编码hs_code、hs、hscode、hsCodedescription,value,quantity,country,hs_code Award plaque,8000,1,KR, Certificate,9000,1,KR,value的语义与--value-mode默认value视为该行的行总价line value即line_total value当value是单价、需要乘以quantity时加--value-mode unit此时line_total value * quantity见 ItemLine.line_total。输入规范化细节有单测佐证见 test_core.py金额解析支持千分位逗号与日元符号8,000、JPY 8000等会被清洗为整数8000布尔值会被拒绝负数与低于下限的值报错_coerce_int国家代码强制两位大写 ISO 码如kr会规范化为KRKOR这类三位码直接抛ValueErrorHS code允许字母、数字、点与连字符去除内部空白长度 2–20 字符品目描述不可为空每行quantity缺省为 1country缺省时可从--country-default注入六、填报规划plan与总额计算plan命令不打开浏览器仅校验文件并输出确定性的填报计划是 Agent「先验证、后执行」的关键一步。规划由 build_contents_plan 生成核心字段字段含义item_count品目行数computed_total由各行line_total求和得到的计算总额declared_total申报总价默认等于计算总额可用--total-value覆盖total_matchesdeclared_total是否与computed_total一致value_mode本次使用的金额模式line/unitwarnings警告列表例如声明总额与计算总额不一致时给出明确提示items每行的规范化结果与line_total「保留独立行、同时维持请求的申报总额」正是通过--total-value实现的例如两份独立内容合计 17000 日元就可以用--total-value 17000让声明总价与请求一致若与逐行求和不同plan会输出declared total 17000 does not match computed item total ...的警告且total_matches为false对应测试 test_plan_warns_declared_total_mismatch。line与unit两种模式的差异也有测试背书line模式下 8000×2 行加 9000×1 行的合计为 17000且首行line_total为 8000unit模式下 4000×2 与 9000×1 同样得到 17000见 test_plan_line_value_mode。七、选择器诊断把「页面状态」变成可检查的事实Web 页面随时可能改版技能为此内置了选择器自检能力cli-anything-web-yu-pri --json selectors cli-anything-web-yu-pri snapshot --url https://mgr.post.japanpost.jp/M060800.do -o page.png --html-output page.htmlselectors输出login_url、contents_url、selectors映射表与add_item_command实现见 selector_report。snapshot则截取整页 PNG并可选保存page.content()的 HTML dump便于 Agent 离线检查真实 DOM见 capture_snapshot。已知内容表单控件技能文档与 SELECTORS 常量 一致控件语义CSS 选择器品目描述#M060800_itemBean_pkg品目金额#M060800_itemBean_cost_value品目数量#M060800_itemBean_num_value原产国#M060800_itemBean_couCdHS code#M060800_itemBean_hsCode包装类型#M060800_shippingBean_pkgType申报总价#M060800_shippingBean_pkgTotalPrice_value危险品标志#M060800_ShippingBean_danger添加品目命令submitCommand(itemAdd2)status命令返回的 inspect_page 结果包含url、title与逐选择器的selectors存在性布尔映射并聚合出has_contents_form字段——它要求item_description、item_value、item_quantity、total_value四个关键选择器同时存在才为真。Agent 可据此在真实填写前判断当前页面是否为可操作的内容表单。八、contents fill 的源码级填报流程与验证机制contents fill是技能的核心命令。其真实流程在 fill_contents 中可完整追踪调用build_contents_plan计算总额并校验输入打开内容表单 URL并用wait_for_selector15 秒超时确认#M060800_itemBean_pkg存在失败时报出页面事实URL、标题、期望选择器而非空泛报错若指定了--package-type写入#M060800_shippingBean_pkgType若指定了--danger设置#M060800_ShippingBean_danger复选框/单选框逐行_fill_item依次填 description、value、quantity再按需填 country 与 hs_code通过页面 JS 调用window.submitCommand(itemAdd2)添加该行见 _run_submit_command_wait_after_submit等待domcontentloaded并用_body_fingerprint页面 URL 正文长度 前 200 个表单控件的 id/name:value 指纹轮询确认页面确实发生了变化避免「点了没生效」的竞态全部行添加完毕后把declared_total写入#M060800_shippingBean_pkgTotalPrice_value读取页面正文做回读验证_verify_descriptions检查每一条品目描述是否出现在页面文本中输出descriptions_found、descriptions_missing与all_found。_set_value见 browser.py对select使用select_option、对普通输入使用fill若二者都失败则降级为原生赋值并派发input/change事件。这个三级策略让表单操作对多种页面控件都具备弹性。最终 JSON 输出结构为status: filled、plan完整填报计划、added逐行实际提交的记录、page页面巡检结果、verification描述回读验证、safetyfinal_submit_clicked: false与说明文案。Agent 应依据verification.all_found判断填报是否成功。--dry-run则完全不启动浏览器browser_launched: false只输出plan、selectors、add_item_command与安全元数据见 build_dry_run这正是技能安全规则要求的「触网前必做」的一步。九、测试策略离线可测与真实环境隔离仓库把「不依赖真实日本邮政账号」的测试与「真实环境」测试严格分层详见 TEST.mdtest_core.py覆盖别名解析、非法国家码拒绝、JSON 对象/数组载荷加载、CSV 别名、line/unit总额计算、总额不匹配警告、选择器报告、dry-run 安全元数据以及 CLI 层的--help、plan --json、contents fill --dry-run --json、缺失文件的 JSON 错误输出等 15 项浏览器相关逻辑通过 mock 隔离全程不启动浏览器。test_full_e2e.pytest_dry_run_cli_workflow以子进程方式端到端验证「写 items.json → dry-run → 检查 JSON 结构、总额 17000、safety 与选择器映射」test_live_status_against_contents_page则被WEB_YU_PRI_LIVE_E2E1环境变量门控——真实登录与表单变更默认不进入 CI。按文档记录的测试结果python -m pytest cli_anything/web_yu_pri/tests -v共收集 17 项16 通过、1 跳过跳过的正是 live 测试。这种设计让核心逻辑可以在任何环境回归而真实站点操作始终由人工把关。十、Agent 推荐工作流从检查到安全填报综合以上能力一个完整的 Agent 工作流如下# 1. 环境体检 cli-anything-web-yu-pri --json doctor # 2. 人工登录持久化 Profile凭据不进 CLI cli-anything-web-yu-pri open-login # 3. 巡检内容表单是否可用 cli-anything-web-yu-pri --json status --url https://mgr.post.japanpost.jp/M060800.do # 4. 离线规划校验 items 文件并核对总额 cli-anything-web-yu-pri --json plan items.json # 5. 干跑确认选择器、计划与安全元数据不启动浏览器 cli-anything-web-yu-pri --json contents fill items.json --dry-run # 6. 真实填写只到内容行 申报总价不点最终提交 cli-anything-web-yu-pri --json contents fill items.json --total-value 17000最后一步返回的verification与safety字段是 Agent 判断「已填写但未提交」的权威证据verification.all_found说明品目行全部上屏safety.final_submit_clicked: false说明最终出货确认仍留给人工完成。更多实现细节可继续阅读 WEB_YU_PRI.md、core/browser.py 与 core/items.py。【免费下载链接】CLI-AnythingCLI-Anything: Making ALL Software Agent-Native -- CLI-Hub: https://clianything.cc/项目地址: https://gitcode.com/GitHub_Trending/cl/CLI-Anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表