實戰示例:複雜場景處理
本章提供了一些更高階的 Playwright 腳本片段,幫助您應對自動化過程中的各類挑戰。
1. 批量操作:矩陣帳號啟動器
如果你有多個帳號需要同時執行簽到或巡檢任務:
javascript
const sessionIds = ['ID_A', 'ID_B', 'ID_C'];
async function processAll() {
for (const id of sessionIds) {
// 1. 調用 ApiServer 啟動
const { data: { data: { ws } } } = await axios.post(`${API_URL}/api/v1/browser/start`, { Session_ID: id });
// 2. 接管並執行
const browser = await chromium.connectOverCDP(ws);
const page = browser.contexts()[0].pages()[0] || await browser.contexts()[0].newPage();
await page.goto('https://target-site.com/check-in');
await page.click('#btn-sign');
// 3. 釋放連接但保持窗口 (或調用 stop 接口關閉)
await browser.close();
}
}2. 處理 IFrame (常見於支付或三方登錄)
Playwright 定位 IFrame 內的元素非常優雅:
javascript
// 通過 Frame 定位器直接操作
const frame = page.frameLocator('iframe[name="login-frame"]');
await frame.getByPlaceholder('請輸入密碼').fill('mypassword');
await frame.getByRole('button', { name: '確認付款' }).click();3. 下載文件並重命名
在跨境電商後台導出報表時的常用操作:
javascript
// 監聽下載事件
const downloadPromise = page.waitForEvent('download');
await page.getByText('下載 CSV 報表').click();
const download = await downloadPromise;
// 保存到本地指定目錄
await download.saveAs('./reports/' + download.suggestedFilename());4. 模擬真人規避偵測:隨機動作
簡單的隨機休眠和滾動:
javascript
async function humanScroll(page) {
for (let i = 0; i < 5; i++) {
await page.mouse.wheel(0, Math.floor(Math.random() * 500) + 200);
await page.waitForTimeout(Math.floor(Math.random() * 1000) + 500);
}
}5. 無頭模式與有頭模式
候鳥環境默認是**「有頭模式(有界面)」**。如果您希望腳本在後台靜默運行不干擾桌面,可以在啟動環境接口中傳入參數(若版本支持)或嘗試在 Playwright 連接後隱藏窗口。
NOTE
由於指紋瀏覽器的特殊性,強烈建議在「有界面」模式下開發和調試,待穩定後再考慮並行優化。
TIP
恭喜您完成了 Playwright 專題的學習!如果您的項目需要使用傳統的 Selenium 框架,請移步至 Selenium 接口指南。
