You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chajia/docs/rpa-flock-logged-in-sop.md

5.4 KiB

Flock Freight 登录后查价录制 SOP(Step 12.78)

匿名 marketing 仍走 npm run record:flock(get-a-quote)。
本文件仅覆盖:客户配置 Flock 账密后的登录态查价路径。

前置

  1. 准备 Flock 官网账密(.env 的 FLOCK_LOGIN_EMAIL / FLOCK_LOGIN_PASSWORD,或管理端客户「查价网站账密」)
  2. 本机已装 Playwright Chromium/Chrome;RPA_BROWSER_CHANNEL=chrome 推荐
  3. 关闭会干扰 codegen 的自动填密插件(或全程手动粘贴)

启动

npm run record:flock -- --logged-in
# 或指定入口
npm run record:flock -- --logged-in https://app.flockfreight.com/login

Windows:

powershell -ExecutionPolicy Bypass -File scripts/record-flock.ps1 -LoggedIn

产物约定:

类型 路径
codegen 脚本 .rpa/recordings/flock-logged-in-<时间戳>.js
storageState .rpa/flock-logged-in-storage.json

与匿名 .rpa/flock-storage.json 隔离,禁止混用。

人工路径(必须完整一次)

标准样例:Pickup ZIP 90001 → Delivery ZIP 75201;托盘/重量/尺寸按清单(或登录后表单等价字段)。

  1. codegen 打开登录页(若未登录)
  2. 手动粘贴邮箱/密码并提交(脚本不自动填)
  3. 进入登录后查价入口(记录最终 URL;常见 Let's build a quote / Quick)
  4. 按页面真实字段走完:ZIP/Type/Packaging/Class/Description/提交 → 等到报价结果出现
  5. 关闭 codegen 窗口,确认 js + storage 落盘

录制后必填清单(从 js 摘抄)

将下列项填入下方「附录 A」;正式写入 .env 的 FLOCK_SELECTOR_* / 登录后 UI 适配可与下一步同做。

# 项 说明
1 登录页 URL 默认 https://app.flockfreight.com/login
2 登录后报价入口 URL 出「Let's build a quote」或等价表单的首个稳定 URL
3 FLOCK_SELECTOR_LOGIN_EMAIL email 输入
4 FLOCK_SELECTOR_LOGIN_PASSWORD password 输入
5 FLOCK_SELECTOR_LOGIN_SUBMIT 登录提交
6 表单可见标记 heading / 关键文案(供 isFlockLoggedInQuoteForm)
7 提货/派送 ZIP 或地址字段
8 Type / Packaging / Freight Class / Description 登录后必填项
9 提交报价 selector 如 Generate my quote
10 出报价特征 网络 URL 模式或结果 DOM 文案

录制后可运行:

npx tsx scripts/finalize-flock-logged-in-recording.ts

禁止

  • 用匿名 get-a-quote 录制冒充登录后页(字段不同)
  • 用手猜 selector 跳过本 SOP
  • 把登录态 storage 写进匿名 FLOCK_STORAGE_STATE_PATH

附录 A — 本次录制摘抄(人工回填)

2026-07-15 15:58:人工重录完整路径(flock-logged-in-20260715-155553.js),已出报价 quote/TSM-TQ8Q。
警告:原始 js 曾含明文账密,已脱敏为 REDACTED;勿提交真实密码。脱敏基线:scripts/fixtures/flock-logged-in-quote-baseline.js。

项 值
录制脚本文件 .rpa/recordings/flock-logged-in-20260715-155553.js
storageState .rpa/flock-logged-in-storage.json(存在)
登录页 URL https://app.flockfreight.com/login
登录后入口 https://app.flockfreight.com/home → header-new-quote-button → quick-form-toggle
结果页示例 https://app.flockfreight.com/quote/{id}(本次 quote/TSM-TQ8Q)
LOGIN_EMAIL getByRole('textbox', { name: 'Email Address' }) → Next
LOGIN_PASSWORD getByRole('textbox', { name: 'Password' })
LOGIN_SUBMIT getByRole('button', { name: 'Log in' })
表单可见标记 Quick:quick-form-toggle;提交 testid quote-request-quick-form__submit_button
ZIP/地址字段 Pickup ZIP Code / Delivery ZIP Code
提货/派送类型 combobox Pickup Type * / Delivery Type *
货物字段 Quantity / Packaging(Bags 时有 Length/Width)/ Height / Weight / Freight Class(含 density)/ Description / Stackable
出报价特征 /quote/{id};Standard-fulfillment-option / FlockDirect®-fulfillment-option
录制日期 2026-07-15

附录 B — 登录态结账 fill-only(Step 12.172)

对齐 MotherShip checkout:选档 → 最低价 → Yes I want this rate → 填齐表单 → 硬停(不点 Complete your order / 支付)。

# 默认 fillOnly(填齐停)
npm run probe:flock-checkout
DIAG_HEADED=true npm run probe:flock-checkout

# 指定档位
PROBE_FLOCK_TIER=standard DIAG_HEADED=true npm run probe:flock-checkout

# 已有报价 reference(可选)
PROBE_FLOCK_REFERENCE=F7G-5RWY DIAG_HEADED=true npm run probe:flock-checkout

# 放开到 Agree(仍不支付)
PROBE_FLOCK_FILL_ONLY=0 DIAG_HEADED=true npm run probe:flock-checkout
阶段 行为
pricing options 按 preferred_tier 点对应卡 See Pricing Options(testId:FlockDirect®-fulfillment-option / Standard-fulfillment-option)
档内价 选最低价 radio → Yes, I want this rate!
填表 role=shipper;尽量 Use billing address;强制补公司/联系人/电话/邮箱/营业时间/PO
fillOnly stage=details_filled;截图 .rpa/diag/flock-checkout-*.png
禁止 Complete your order、Pay、Submit payment

嵌入:登录态结果卡必选档 →「前往结账」→ POST /api/quotes/flock-checkout → 轮询 flock_checkout。