关于 american-airlines
此技能通过浏览器自动化读取 American Airlines AAdvantage 账户信息,适用于跟踪里程和精英会籍的旅客。它支持以 JSON 输出账户余额与状态,但不能预订航班。
主要功能
- 01查询可兑换里程余额
- 02查看精英会籍与忠诚积分
- 03查看 Million Miler 里程
- 04支持 2FA 与持久化配置文件
- 05以 JSON 输出结果
适用场景
- 01核对 AAdvantage 里程余额
- 02跟踪忠诚积分与会籍进度
- 03确认精英会籍等级及有效期
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ borski/ travel-hacking-toolkit --skill american-airlines安装后在 Claude Code 中输入/american-airlines确认已加载。
附带文件Dockerfilescripts/check_balance.py
详细介绍
American Airlines AAdvantage
查看 AAdvantage 奖励里程余额、精英会籍等级(Gold/Platinum/Platinum Pro/Executive Platinum)、忠诚积分和 Million Miler 会籍状态。使用 Patchright(未被检测到的 Playwright 分支),因为 AA 会拦截标准浏览器自动化工具。
需要 Patchright。 AA.com 会拦截原版 Playwright 和 agent-browser。
先决条件
pip install patchright && patchright install chromium
也可以使用 Docker(无需本地安装):
docker pull ghcr.io/borski/aa-miles-check:latest
# or build locally:
docker build -t aa-check skills/american-airlines/
用法
通过环境变量或标志传入凭据。如果使用密钥管理器(1Password、Vault 等),请按平常的方式注入凭据。
# Environment variables
AA_USERNAME=your_aa_number AA_PASSWORD=your_password \
python3 scripts/check_balance.py --json
# Flags
python3 scripts/check_balance.py --username YOUR_AA_NUMBER --password YOUR_PASSWORD --json
# Docker
docker run --rm -e AA_USERNAME=your_aa_number -e AA_PASSWORD=your_password aa-check --json
双重身份验证处理
AA 要求在新设备上首次登录时进行电子邮件验证。脚本最多等待 120 秒以获取验证码。
你(Agent)无法访问用户的电子邮件。 AA 会将双重身份验证验证码发送到账户持有人的电子邮箱。当脚本触发双重身份验证时,你必须向用户索要 6 位验证码。这是必需步骤。不要尝试读取用户的电子邮件。不要猜测。不要跳过。向用户索要验证码,等待用户回复,然后将验证码写入代码文件。
Agent 工作流程
- 在后台运行脚本(
nohup ... &、disown) - 轮询 stderr,查找
"2FA REQUIRED",确认验证码已发送 - 向用户索要 AA 发到其邮箱的 6 位验证码
- 将验证码写入代码文件:
echo "123456" > /tmp/aa-2fa-code.txt - 等待脚本完成,并读取 stdout 中的 JSON 结果
持久化配置文件(重复运行时跳过双重身份验证)
使用 --profile name 保存浏览器 Cookie。首次成功完成双重身份验证后,后续使用同一配置文件运行时将完全跳过双重身份验证。配置文件存储在 ~/.aa-browser-profiles/{name}/。会话有效期为数小时,而非数天。
# First run: will need 2FA
python3 scripts/check_balance.py --profile user1 --json
# Later runs: same profile, no 2FA
python3 scripts/check_balance.py --profile user1 --json
验证码输入方式
- 命令钩子: 将
AA_2FA_COMMAND设置为一条命令,该命令会阻塞,直到获取验证码,然后将验证码打印到 stdout。脚本会先运行此命令,然后再回退到轮询文件。 - 文件(默认): 脚本每隔 2 秒轮询一次
/tmp/aa-2fa-code.txt。将 6 位验证码写入该文件。 - 直接传入标志: 如果运行前已获取验证码,可使用
--code 123456。 - 自定义文件路径:
--code-file /path/to/code.txt
输出
{
"username": "XXXXXXX",
"status": "completed",
"miles": 123425,
"elite_status": "Platinum Pro",
"loyalty_points": 180,
"name": "John Doe",
"aadvantage_number": "XXXXXXX",
"million_miler": 19328,
"member_since": "Aug 23, 2011"
}
| 字段 | 描述 |
|---|---|
miles | 奖励里程余额(可兑换) |
elite_status | Gold、Platinum、Platinum Pro 或 Executive Platinum(如果没有,则为 null) |
loyalty_points | 本年度忠诚积分(3 月 1 日重置) |
million_miler | 累计的 Million Miler 会籍里程 |
member_since | 账户创建日期 |
适用场景
- 查看 AA 里程余额(AwardWallet 不支持 AA)
- 验证精英会籍等级及其到期时间
- 跟踪距离下一会籍等级所需的忠诚积分
- 将 AA 奖励航班的可用情况与余额进行比较(可与 seats-aero 搭配使用)
不适用场景
- 预订航班。 仅支持读取,不会修改任何内容。
- 其他航空公司。 对于 AwardWallet 支持的航空公司,请使用 AwardWallet。
实现说明
- AA 使用 6 个独立输入框输入双重身份验证码(每个输入框一位)。脚本会逐位输入,并自动跳转到下一个输入框。
- 点击 Verify 按钮前,会通过 JS 移除 Cookie 同意横幅。
- 必须通过 Tab+Enter 提交 Verify 按钮(JS
.click()和 Playwright.click()都无法触发 AA 的 React 应用接受的可信指针事件)。 - 必须设置
headless=False。即使使用 Patchright,AA 仍能检测到无头浏览器。Docker 使用 xvfb 提供虚拟显示器。
限制
- 每个配置文件首次使用时需要双重身份验证。 无法绕过。AA 会发送电子邮件验证码。设置
AA_2FA_COMMAND可自动获取验证码。 - 会话过期。 持久化配置文件的有效期为数小时,而非数天。运行间隔较长时,可能需要再次进行双重身份验证。
- 必须使用有头模式。 会在本地打开 Chrome 窗口。若要避免弹窗,请使用 Docker。