實戰演示:對 AI 說話,一步生成完整腳本
本章將完整演示從「用自然語言說需求」到「拿到可運行腳本」的全過程,細化到每一步的操作。
演示場景
業務背景:您有 20 個 Amazon 賣家帳號,每天需要檢查每個帳號下「Pending(待處理)」的訂單數量,並匯總成一份 Excel 報表發給團隊。
傳統方法:手動一個個登錄帳號,記錄訂單數,填寫 Excel。耗時約 2 小時。
使用 AI + 候鳥:描述需求,AI 生成腳本,腳本幫您幹活。耗時約 15 分鐘(含配置時間)。
第一步:準備工作 (5 分鐘)
NOTE
假設您已經完成了前幾章的配置:
- ✅ 已安裝 Cursor 或 Antigravity。
- ✅ 已將候鳥 Rules 知識包導入 Cursor。
- ✅ 已開啟候鳥 ApiServer (
http://127.0.0.1:8186)。 - ✅ 您的 Amazon 帳號已經在候鳥環境中登錄過(Cookie 已保存)。
準備 sessions.txt 文件
在您的項目文件夾下,創建 sessions.txt,填入您要操作的所有環境 ID:
a1b2c3d4e5f6789012345678901234ab
b2c3d4e5f67890123456789012345bcd
c3d4e5f678901234567890123456cde
... (每行一個 Session_ID,共 20 行)第二步:在 Cursor 中輸入需求 (30 秒)
按下 Ctrl + L 打開 Cursor Chat,輸入以下內容:
我有一個候鳥 sessions.txt 文件,裡面存放了 20 個帳號的 Session_ID,每行一個。
這些帳號已經在候鳥環境中登錄過 Amazon 了。
請幫我生成一個 Python 腳本,實現以下功能:
1. 讀取 sessions.txt 中的所有 Session_ID。
2. 批量開啟所有環境 (併發數量控制在 10 個)。
3. 在每個環境被 Playwright 接管後:
a. 等待頁面加載 (環境通常會停留在上次關閉時的頁面)。
b. 跳轉到 https://www.amazon.com/gp/orders-v2/list (Amazon 賣家訂單頁面)。
c. 等待 .a-row.shipment 元素出現 (代表訂單列表加載完成)。
d. 統計頁面中 .shipment-status-buyerPending 元素的數量 (這些是 Pending 訂單)。
e. 將 Session_ID 前 8 位 + Pending 訂單數量記錄下來。
4. 所有操作完成後,關閉所有環境。
5. 將結果保存為 amazon_orders_[當天日期].xlsx,
包含列:環境 ID (前 8 位)、Pending 訂單數、檢查時間、狀態。
如果發生異常,截圖保存到 errors/ 文件夾,並在結果表中記錄「檢查失敗」。第三步:AI 生成代碼 (約 30 秒)
收到需求後,Cursor 的 AI 會開始生成全量代碼。生成的結果應該如下所示:
python
"""
候鳥瀏覽器 + Amazon 訂單檢查腳本
自動檢查各環境下的 Pending 訂單數量
"""
import threading
import datetime
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
import openpyxl
from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout
# ==============================
# 配置項 (根據實際情況修改)
# ==============================
APISERVER = "http://127.0.0.1:8186"
SESSIONS_FILE = "sessions.txt"
MAX_WORKERS = 10 # 最大併發數
ERRORS_DIR = Path("errors")
ERRORS_DIR.mkdir(exist_ok=True)
results_lock = threading.Lock()
results = []
# ==============================
# APIServer 封裝
# ==============================
def start_env(session_id: str) -> dict | None:
try:
resp = requests.post(
f"{APISERVER}/api/v1/browser/start",
json={"Session_ID": [session_id], "isHeadless": False},
timeout=30
)
data = resp.json()
if data["code"] == 0:
return data["data"]["listid"][0]
except Exception as e:
print(f"[{session_id[:8]}] APIServer 報錯: {e}")
return None
def stop_env(session_id: str):
try:
requests.post(
f"{APISERVER}/api/v1/browser/stop",
json={"Session_ID": session_id},
timeout=10
)
except Exception:
pass
# ==============================
# 單個帳號任務
# ==============================
def check_orders(session_id: str):
now = datetime.datetime.now().strftime("%H:%M:%S")
env_short = session_id[:8]
env_data = start_env(session_id)
if not env_data:
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": "開啟環境失敗"
})
return
port = env_data.get("browser_CDP_Port")
ws = f"ws://127.0.0.1:{port}/json/version"
pw = sync_playwright().start()
try:
browser = pw.chromium.connect_over_cdp(ws)
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
# 訪問 Amazon 訂單頁
page.goto(
"https://www.amazon.com/gp/orders-v2/list",
wait_until="domcontentloaded",
timeout=20000
)
# 等待訂單列表加載
page.wait_for_selector(".a-row.shipment", timeout=15000)
# 統計 Pending 訂單
pending = page.locator(".shipment-status-buyerPending").count()
print(f"[{env_short}] ✅ 檢查完成,Pending 數: {pending}")
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": pending,
"check_time": now,
"status": "成功"
})
browser.close()
except PWTimeout:
page.screenshot(path=str(ERRORS_DIR / f"{env_short}_timeout.png"))
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": "頁面加載超時"
})
except Exception as e:
try:
page.screenshot(path=str(ERRORS_DIR / f"{env_short}_error.png"))
except Exception:
pass
with results_lock:
results.append({
"env_id": env_short,
"pending_orders": "N/A",
"check_time": now,
"status": f"異常: {str(e)[:50]}"
})
finally:
try:
pw.stop()
except Exception:
pass
stop_env(session_id)
# ==============================
# 主代碼
# ==============================
def main():
# 讀取 Session_ID 列表
session_ids = [
line.strip()
for line in Path(SESSIONS_FILE).read_text().splitlines()
if line.strip()
]
print(f"📋 共 {len(session_ids)} 個帳號,併發數 {MAX_WORKERS}")
# 併發執行
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool:
futures = {pool.submit(check_orders, sid): sid for sid in session_ids}
for future in as_completed(futures):
sid = futures[future]
try:
future.result()
except Exception as e:
print(f"[{sid[:8]}] 未捕獲異常: {e}")
# 保存 Excel 表
today = datetime.date.today().strftime("%Y%m%d")
filename = f"amazon_orders_{today}.xlsx"
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "訂單檢查結果"
ws.append(["環境 ID (前 8)", "Pending 訂單數", "檢查時間", "狀態"])
for r in results:
ws.append([r["env_id"], r["pending_orders"], r["check_time"], r["status"]])
wb.save(filename)
# 打印匯總
success = sum(1 for r in results if r["status"] == "成功")
print(f"\n{'='*40}")
print(f"✅ 檢查完畢: 成功 {success} / 總額 {len(results)}")
print(f"📄 報表已保存至: {filename}")
print(f"❌ 錯誤截圖在: errors/ 文件夾")
if __name__ == "__main__":
main()第四步:安裝依賴並運行 (2 分鐘)
生成代碼後,AI 通常會告訴用戶需要安裝哪些依賴包:
bash
pip install playwright requests openpyxl然後直接運行:
bash
python check_amazon_orders.py預期運行效果
📋 共 20 個帳號,併發數 10
[a1b2c3d4] ✅ 檢查完成,Pending 數: 3
[b2c3d4e5] ✅ 檢查完成,Pending 數: 0
[c3d4e5f6] ✅ 檢查完成,Pending 數: 7
...
========================================
✅ 檢查完畢: 成功 18 / 總額 20
📄 報表已保存至: amazon_orders_20260226.xlsx
❌ 錯誤截圖在: errors/ 文件夾常見問題與 AI 修復技巧
「腳本能跑,但找不到訂單元素」
選中相關代碼,按 Ctrl + K 輸入:
Amazon 頁面的選取器變了,現在訂單行選取器是 .order-info,Pending 狀態選取器是 .order-status-pending,請更新代碼。「增加功能:順便採集訂單詳情」
在 Chat 中繼續對話:
基於上面的代碼,在採集訂單數量後,請順便採集頁面中每個 Pending 訂單的 訂單號 (.a-fixed-right-grid-col .a-link-normal) 和 預期發貨日期 (.expected-ship-date),並記錄到 Excel 中。「併發太快導致崩潰,需要限流」
基於 ThreadPoolExecutor 併發,請在每次開啟新任務前增加 3 秒的隨機等待週期,避免同時開啟太多環境導致內存不足。總結:AI 寫腳本的最佳實踐
[ 準備階段 ]
1. Rules 知識包已導入 -> AI 聽懂候鳥所有接口。
2. 確認 ApiServer 已啟動。
[ 需求描述 ]
越具體越好:
✅ 「訪問 https://xxx,等待 #main-content 元素,點擊 .order-btn,等待成功彈窗」
❌ 「幫我管一下訂單」
[ 生成階段 ]
通常 80% 可直接用。微調細節通過追問解決。
[ 迭代優化 ]
「基於這個再加個 xx 功能」 -> AI 會在不重寫的情況下追加修改。IMPORTANT
重要提醒:AI 生成的代碼雖然強大,但偶爾會有小瑕疵。在大規模運行前,請務必先在 1-2 個測試環境上跑通,確認無誤後再應用到全量環境。
TIP
🎉 恭喜您!您現在已經掌握了利用 AI 模型為候鳥瀏覽器一步生成自動化腳本的全套方法。
遇到問題?請參考對應章節:
- 接口對不上? -> 候鳥 Rules 知識包 檢查 ApiServer 用法。
- 沒寫腳本思路? -> Skills 技能包 找場景化模板。
