如何在 Puppeteer 中使用認證代理
Chrome 將代理主機和埠號作為啟動參數,而 Puppeteer 則使用 page.authenticate 來回應登入提示。
步驟
- 使用 --proxy-server=host:port 啟動 Chrome
- 使用你的 proxy 使用者名稱和密碼呼叫 page.authenticate
- 啟用請求攔截以阻止圖片和字型
- 每個 session id 開啟一個瀏覽器以保持固定 IP
範例程式碼
import puppeteer from "puppeteer";
const browser = await puppeteer.launch({ args: ["--proxy-server=gw.gbproxies.cc:10000"] });
const page = await browser.newPage();
await page.authenticate({ username: "USERNAME-cc-fr-sid-shop1-ttl-30", password: "PASSWORD" });
await page.setRequestInterception(true);
page.on("request", (r) => (["image", "font", "media"].includes(r.resourceType()) ? r.abort() : r.continue()));
await page.goto("https://api.ipify.org");
console.log(await page.content());
await browser.close();將USERNAME和PASSWORD替換為控制台Proxies頁面中的代理登入資訊。端口10000是住宅HTTP代理;各產品端口請見下方。
提示
- 阻止圖片通常能將每頁的流量減少一半以上
- 固定的 session id 會保持相同的 IP 用於整個瀏覽流程
常見問題
為什麼 Chrome 仍然顯示登入彈出視窗?
page.authenticate 必須在該頁面的首次導航之前執行。