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

Puppeteer配置代理后IP查询网站仍显示真实IP的问题排查

Puppeteer代理在IP查询站失效的原因与修复方案

核心原因分析

  1. 请求拦截未正确处理
    你开启了page.setRequestInterception(true)但未添加请求监听逻辑,导致所有网络请求被拦截后无法继续执行。这种情况下浏览器可能 fallback 到直接连接,从而暴露真实IP。

  2. 代理类型不匹配
    如果使用的是透明代理,whatismyipaddress这类IP查询站能通过HTTP头中的X-Forwarded-For获取你的真实IP,因此显示的不是代理IP。

  3. WebRTC IP泄露
    Puppeteer默认允许WebRTC,即使浏览器级代理生效,WebRTC也可能绕过代理直接连接网络,泄露真实IP。IP查询站通常会检测WebRTC返回的IP。

  4. 代理配置冲突
    你导入了puppeteer-page-proxy但未实际使用,同时又通过--proxy-server配置浏览器级代理,可能存在潜在冲突,导致部分请求未走代理。


修复方案与代码调整

1. 修复请求拦截逻辑

开启请求拦截后必须监听request事件并调用request.continue(),确保请求正常走代理:

import puppeteer from "puppeteer-extra";
import Stealth from 'puppeteer-extra-plugin-stealth'
import { executablePath } from "puppeteer";

puppeteer.use(Stealth())
async function main(url) {
  const proxy = 'http://135.181.40.86:8080';
  const browser = await puppeteer.launch({ 
    headless: false, 
    defaultViewport: null , 
    executablePath: executablePath() , 
    args: [`--proxy-server=${proxy}`] 
  })

  const page = await browser.newPage()
  // 开启请求拦截后必须添加监听逻辑
  await page.setRequestInterception(true);
  page.on('request', (request) => {
    request.continue(); // 确保请求正常执行
  });

  // 禁用WebRTC防止IP泄露
  await page.evaluateOnNewDocument(() => {
    window.RTCPeerConnection = undefined;
    Object.defineProperty(navigator, 'webrtc', {
      get: () => undefined,
    });
  });

  await page.goto(url)
  await page.waitForTimeout(10000000)
  await browser.close()
}

main("https://www.whatismyipaddress.com/")

2. 更换为高匿代理

如果当前代理是透明/匿名代理,更换为高匿代理(Elite Proxy),这类代理不会在HTTP头中暴露真实IP,IP查询站只会显示代理IP。

3. 二选一使用代理配置

要么使用浏览器级的--proxy-server,要么使用puppeteer-page-proxy(需正确调用),避免两种方式混用。若选择puppeteer-page-proxy,可去掉--proxy-server参数,改为:

// 替换原page.goto相关代码
await useProxy(page, proxy);
await page.goto(url);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:12:28