Selenium与Puppeteer自动化测试中代理IP的集成方案

谷德IP代理 2026-03-10 10:55:38

凌晨两点,屏幕上突然跳出一行刺眼的 403 Forbidden,你瞬间清醒了。你写的电商价格监控脚本,辛辛苦苦跑了三天,眼看数据就要抓完,结果网站直接把你IP封了。

这不是代码写错了,就是你和网站反爬机制硬碰硬,输了一局。你想过换个IP继续爬,但手动换IP、测IP、重启程序,一套折腾下来,天都快亮了。

Selenium与Puppeteer自动化测试中代理IP的集成方案

这几乎是每个写过 Selenium、Puppeteer 的开发者都经历过的噩梦。而解决这个问题最核心、最实用的方案,就是:把代理IP直接集成到你的自动化工具里


两个最常用的自动化“工具人”


Selenium 和 Puppeteer 是现在最火的两个浏览器自动化工具。你可以把 Selenium 当成一个经验丰富的老司机,Chrome、Firefox、Edge 啥车都能开,兼容性强,但有时候启动慢、动作有点笨重。而 Puppeteer 更像一个专精选手,只开 Chromium 系浏览器,启动快、操控精准,但别的浏览器就不太适配。


虽然它们支持的浏览器不一样,但在设置代理这件事上,思路几乎一模一样。


给 Selenium 换个“新IP”


在 Selenium 里加代理,其实就是告诉浏览器:“走我指定的代理线路”。

用 Python 举个最简单的例子:


from selenium import webdriver


options = webdriver.ChromeOptions()
proxy = "http://你的代理IP:端口"
options.add_argument(f'--proxy-server={proxy}')


driver = webdriver.Chrome(options=options)
driver.get("http://httpbin.org/ip")


这段代码能搞定不需要账号密码的普通代理

但如果代理要用户名密码验证,就麻烦一点——浏览器会弹登录框,Selenium 自己处理不了。

要么把账号密码直接写在代理链接里(简单但不太安全),要么写个小插件自动填账号密码。


Puppeteer 的代理配置更清爽


Puppeteer 的风格就是简洁,启动浏览器时直接加一行参数就行:


const puppeteer = require('puppeteer');


(async () => {
  const browser = await puppeteer.launch({
    args: ['--proxy-server=http://你的代理IP:端口']
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  // 你的业务逻辑
  await browser.close();
})();


遇到需要账号密码的代理,Puppeteer 更友好,直接用 `page.authenticate()` 传账号密码就行,比 Selenium 处理弹窗优雅很多。


别手动换IP了,直接上“智能切换”


上面的方法只能解决小批量、临时的封禁。真要做大规模采集,手动换单个IP,跟拿水枪灭火没区别。真正工程上能用的,是这两个:代理IP池隧道代理IP


代理池

 就是准备一大堆IP,每次新开浏览器,或者发现当前IP被封/被限,就自动换一个新的。

 配合多线程,你可以同时跑几十个不同IP的浏览器,效率直接拉满。


隧道代理

 这是更省心的高级玩法。

 你代码里只配一个固定的隧道地址,不用管IP列表,服务商后台会自动给你每次请求换IP,甚至自动挑更稳定、更干净的IP。

 你只管写爬虫逻辑,换IP的事全交给隧道代理。


换了IP还不够,记得把自己“伪装好”


现在的网站反爬,早就不是只看IP这么简单了。一个IP在北京,时区却是美国,语言还是英文,一眼就被看穿是爬虫。


所以配上代理之后,一定要顺手做伪装:


  • Puppeteer 里改改窗口大小、随机换 User-Agent
  • Selenium 里隐藏掉 `navigator.webdriver` 这种自动化特征


代理解决的是你在哪,伪装解决的是你是谁。两者配合,才不容易被识别。


从半夜被 403 搞到失眠,到搭出一套自动换IP、自动伪装的稳定采集系统,Selenium 和 Puppeteer 配合代理的方案,就是你对抗反爬最实用的武器。


选一个稳定靠谱的代理,把上面这些代码整合进你的项目,下次再面对网站的反爬机制,你心里会踏实很多。