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

95 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Flock Freight 登录后查价录制 SOPStep 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 的自动填密插件(或全程手动粘贴)
## 启动
```bash
npm run record:flock -- --logged-in
# 或指定入口
npm run record:flock -- --logged-in https://app.flockfreight.com/login
```
Windows
```powershell
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 文案 |
录制后可运行:
```bash
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 / PackagingBags 时有 Length/Width/ Height / Weight / Freight Class含 density/ Description / Stackable |
| 出报价特征 | `/quote/{id}``Standard-fulfillment-option` / `FlockDirect®-fulfillment-option` |
| 录制日期 | 2026-07-15 |