开始之前

  • 安装了 Puppeteer 的 Node.js:npm i puppeteer,它会同时下载匹配的 Chrome。
  • 服务页面上的 HOST、PORT、USERNAME 和 PASSWORD。

你的连接信息

登录控制台,打开你购买的服务。服务页面上会显示该服务的主机、端口、用户名和密码。ProxyPanda 没有一个统一的固定地址,所以每次都请从那里复制。指南中的代码使用下面这些占位符,请逐一替换成你自己的值。

HOST
该服务的代理地址,按服务页面上显示的原样填写。
PORT
要连接的端口。请和主机一起复制,因为不同服务的端口可能不同。
USERNAME
你的代理登录名。它与你登录控制台所用的邮箱是分开的。
PASSWORD
请完整复制。住宅代理在控制台中选择的选项会附加在密码末尾,凭记忆手动输入的密码会丢失这些选项。

把你用来连接的 IP 地址加入服务的白名单,就可以不用用户名和密码。这时代码里只需要 HOST 和 PORT。

示例都使用 HTTP,它可以通过加密隧道访问 https 网站。SOCKS5 同样可用:住宅代理的端口两种都接受,ISP 和数据中心代理在控制台里切换协议。

步骤

  1. 用 --proxy-server 启动 Chrome

    参数里只写协议、主机和端口。Chrome 不接受写在其中的用户名或密码。

  2. 在 page.goto 之前调用 page.authenticate

    这样 Chrome 会用你的凭据回应代理的 407 验证。脚本会打印 api.ipify.org 看到的地址,应当是代理的地址。

    check-ip.mjs
    import puppeteer from 'puppeteer';
    
    const browser = await puppeteer.launch({
      args: ['--proxy-server=http://HOST:PORT'],
    });
    const page = await browser.newPage();
    await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });
    await page.goto('https://api.ipify.org?format=json');
    console.log(await page.evaluate(() => document.body.innerText));
    await browser.close();
  3. 减少页面下载的内容

    请求拦截可以在图片、媒体和字体加载前将其中止。它可以和 page.authenticate 同时使用,并让按 GB 计费的住宅流量只花在你用得上的部分。

    block-media.mjs
    await page.setRequestInterception(true);
    page.on('request', (request) => {
      if (['image', 'media', 'font'].includes(request.resourceType())) request.abort();
      else request.continue();
    });

轮换 IP 与粘性 IP

传给 page.authenticate 的凭据只对当前页面有效。每打开一个新页面都要再调用一次,否则该页面的请求到达代理时不带登录信息。

住宅代理选“随机 IP”时,同一个页面背后的多条连接可能从不同地址发出。需要看起来像同一个访客的流程,请用“粘性 IP”,或者用不会变化的 ISP 或数据中心 IP。

常见错误与解决办法

net::ERR_NO_SUPPORTED_PROXIES

--proxy-server 参数里写了用户名和密码。那里只保留 http://HOST:PORT,登录信息交给 page.authenticate。

页面是空白的,响应状态为 407

没有调用 page.authenticate,或者它在 page.goto 之后才运行。把它移到 browser.newPage() 之后紧接着调用。

net::ERR_PROXY_CONNECTION_FAILED

Chrome 连不上 HOST:PORT。与服务页面逐一核对,并确认服务没有过期。

Navigation timeout exceeded

出口偶尔会慢,住宅代理上更常见。给 page.goto 传一个更大的 timeout,放弃这个网址之前先重试一次。

选择哪条产品线

截图、生成 PDF 或测试不封服务器 IP 的网站时,数据中心 IP 又快又便宜。会拒绝服务器 IP 段的网站适合用住宅代理;它的流量按 GB 计费,所以值得保留上面的拦截步骤。

卡在某一步了?

把命令和报错贴到 Discord,记得先删掉密码。那里的人大多遇到过这些错误。

加入 Discorddiscord.gg/proxypanda
$5 起步去 Discord 问