|
|
# 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 的自动填密插件(或全程手动粘贴)
|
|
|
|
|
|
## 启动
|
|
|
|
|
|
```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 / Packaging(Bags 时有 Length/Width)/ Height / Weight / Freight Class(含 density)/ Description / Stackable |
|
|
|
| 出报价特征 | `/quote/{id}`;`Standard-fulfillment-option` / `FlockDirect®-fulfillment-option` |
|
|
|
| 录制日期 | 2026-07-15 |
|