如何在Puppeteer中使用认证代理
Chrome将代理主机和端口作为启动标志,Puppeteer通过page.authenticate回答登录提示。
步骤
- 使用--proxy-server=host:port启动Chrome
- 使用代理用户名和密码调用page.authenticate
- 启用请求拦截以阻止图片和字体
- 为每个会话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替换为控制台代理页面中的登录信息。端口10000是住宅HTTP代理;请查看下方每个产品的端口。
提示
- 阻止图片通常可以将每页的流量减少一半以上
- 粘性会话ID在整个浏览流程中保持相同的IP
常见问题
为什么Chrome仍然显示登录弹出窗口?
page.authenticate必须在页面的第一次导航之前运行。