You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Puppeteer发起请求时实现/48 IPv6地址块轮换

Puppeteer实现/48 IPv6段地址轮换方案

你可以根据自己的爬虫场景,选择以下两种成熟可行的实现方式:


方案1:启动时绑定随机IPv6(单实例固定IP,启动轮换)

这是配置成本最低的方案,适合每个爬虫任务单独启动浏览器实例、任务全程使用同一个IP的场景。
Chrome从86版本开始原生支持--bind-address启动参数,直接指定浏览器所有出站请求绑定的源IP,不需要额外依赖其他工具。

示例代码:

const puppeteer = require('puppeteer');
// 复用你已有的随机IPv6生成方法
const exitIPv6 = utils.getRandomIPv6("1234:1234:1234::/48");

(async () => {
  const browser = await puppeteer.launch({
    headless: "new",
    args: [
      // 核心配置:指定所有出站请求绑定的源IPv6地址
      `--bind-address=${exitIPv6}`,
      // 强制优先使用IPv6,避免回落到IPv4出口
      '--enable-ipv6',
      '--disable-dns-prefetch'
    ]
  });

  const page = await browser.newPage();
  // 访问IPv6检测站点确认出口IP生效即可
  await page.goto('https://example.com/');
  
  // 编写你的爬虫业务逻辑
  await browser.close();
})();

注意事项:

  • 确保你的VPS已经正确配置/48段的路由,大部分云服务商分配的IPv6段默认支持任意地址出站,不需要手动把单个IP绑定到网卡
  • 不要使用过低版本的Chrome/Chromium,否则--bind-address参数不生效

方案2:本地代理层实现请求级自动轮换

如果你需要在同一个浏览器实例内,实现不同请求、不同页面加载自动切换IP,可以在本地部署一个轻量代理服务,由代理层完成源地址随机选择的逻辑,再让Puppeteer所有流量走本地代理。

实现逻辑:

  1. 本地启动一个HTTP/SOCKS5代理服务,代理的出站逻辑和你之前写的axios请求逻辑一致:每次收到代理转发请求时,随机从/48段选一个IPv6作为localAddress发起连接
  2. Puppeteer启动时指定代理地址即可,示例配置:
const browser = await puppeteer.launch({
  headless: "new",
  args: [
    // 替换为你本地代理的实际监听地址
    '--proxy-server=http://127.0.0.1:18080'
  ]
});

这个方案灵活度最高,你可以自由控制IP轮换的频率:每个请求换、每个页面换、每隔固定时间换都可以,不需要重启浏览器实例。


注意:Puppeteer的页面请求拦截API只能修改请求头、请求体内容,无法修改TCP连接层面的源IP地址,不要尝试用拦截接口实现源IP切换,不会生效。

内容的提问来源于stack exchange,提问作者Hackel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:42:29