无头 Chrome、Playwright、Puppeteer、Selenium 接入代理的方式与普通 HTTP 客户端不同:地址写在驱动启动参数里,而非系统设置。出错不会让脚本崩溃,却会在反检测设置生效前暴露机器人身份,自动化消耗的流量往往比预期高出许多。下面梳理代理如何嵌入浏览器—驱动—网络链路,多余流量从哪来,什么能降低消耗。

代理如何接入无头浏览器与驱动

无头浏览器的代理写在启动参数里:Chromium 用 --proxy-server=host:port 指定,Playwright 与 Puppeteer 在 proxy 字段设置,Selenium 传入 Proxy 对象。系统级代理转发整机流量含后台进程;驱动级代理只作用于当前会话——正是并行跑数十个不同地址档案所需的隔离方式。

身份验证有两种方式:用户名密码写入代理 URL,在 Playwright 与 Puppeteer 中生效,但单一参数启动的 Chromium 无法这样传密码;或把出口 IP 加入白名单,无需密码。对 IP 固定的 CI 节点,白名单更可靠,无需在环境变量保存密码。

为什么自动化耗费的流量比想象中更多

人工浏览页面通常只看屏幕顶部,不会滚到页脚的统计脚本。驱动默认完整加载页面:字体、分析与广告脚本、再营销像素、客服聊天的 WebSocket——这些都与核对价格或文字无关,却随目标内容一并加载。

商品卡片上有用的数据——价格与参数的 HTML——只有几十 KB,剩下 2–5 MB 是图片、字体和第三方脚本,与任务无关。这是「页面重达数兆」与「只需三个字段」的差额,是白白支付却进不了结果的流量。具体禁用哪些、如何核算,见如何降低代理流量消耗

禁用媒体加载——最主要的省流手段

降低流量最有效的做法,是在驱动层面拦截不进结果的请求,而非换更便宜的通道。Playwright 与 Puppeteer 可拦截并中止 image、media、font 类型;Selenium 配合 Chrome 用偏好设置禁用图片,效果相同。

效果是页面体积下降 3 到 10 倍,取决于原有图片视频数量。对只需文本的任务——价格、库存、订单状态——禁用媒体不影响结果,因为数据本就在 HTML 中。用最便宜通道替代禁用媒体往往适得其反,见廉价代理与优质代理的对比

请求的语言、时区与代理归属地保持一致

更换 IP 不会自动改变浏览器语言、系统时区或 Accept-Language 请求头。若地址是美国的,而上下文时区是 Europe/Moscow、语言是其他语种,网站收到的就是矛盾信号。部分平台按请求头语言提供内容,不一致改变的是页面内容本身,不只是提高可疑度。

在 Playwright 与 Puppeteer 中,locale、timezoneId 与请求头在创建页面时设置,需每次启动都与归属地同步,而非一次性统一配置。「档案加代理」核查清单,含 WebRTC 与 DNS 检测,见反检测浏览器代理配置分步指南

并行档案与每档案独立端口

自动化同时运行多个档案时,共用一个端口有两个问题。网络上:会话争抢带宽与并发上限,超时和重试增多。行为上:若服务商在重复连接间切换出口 IP,网站会看到同一会话地址变化,判定为异常。

规则很简单:每个并行档案配独立端口,会话期间地址稳定。意味着要采购更多通道,但能消除两类多余重试来源。无需手动重建配置即可管理各端口地址,靠 API 驱动的 IP 轮换,做法见如何通过 API 配置 IP 轮换

常见问题

可以让多个无头浏览器档案共用同一个代理吗?

技术上可以,但不建议:多个会话挤在同一端口会争抢带宽并触发超时,网站也可能把同一地址的交替请求判定为可疑。并行运行应为每个档案配独立端口。

禁用图片和字体会不会影响抓取结果?

不会,只要所需数据存在于 HTML 中,而非以图片或 canvas 元素渲染。大规模运行前可分别开启、关闭媒体加载各跑一次并对比——对价格、库存、文本字段通常没有差异。

如何确认浏览器语言与时区和代理归属地一致?

使用浏览器指纹检测服务即可查看网站看到的 IP、国家、时区与语言。建议把这项检测作为脚本的固定第一步,而非偶尔手动检查。

为每个自动化档案配独立端口、为 CI 节点用白名单验证、按任务选通道——按流量计费的住宅与移动地址,或按月计费的数据中心地址——都在代理专区提供。