1 pupppeteer-page-proxy模块简介
puppeteer代理设置方法中介绍了设置代理的几种方式,其中之一是通过拦截请求,再通过http模块转发,给http模块加上代理实现代理设置。pupppeteer-page-proxy[1]nodejs模块就是基于此实现为每个请求或page加代理。其中一些特性如下:
- 支持每个page或每个请求使用代理。
- 内部处理cookie。
- 支持http、https、socks4、socks5 代理。
2 环境准备
需要三个工具:
- puppeteer 2.1.1
- pupppeteer-page-proxy 1.2.3
- nodejs 10+
由于pupppeteer-page-proxy设置代理依赖http-proxy-agent、https-proxy-agent。这两个模块又依赖agent-base。agent-base需要5.0+。而puppeteer2.1.0才将agent-base升级到5.1.1。因此puppeteer版本要使用2.1.1。
pupppeteer-page-proxy发送http请求依赖got[2](一个强大的nodejs http库)。用高版本时got会使用asyn generator因此nodejs版本要升级到10+。否则启动提示语法错误。
3 使用pupppeteer-page-proxy
首先我们为每个请求指定代理。在page.on监听请求,随后通过page proxy发送。以访问百度为例,仅当url包含baidu时才使用代理。当打开页面后,我们查询ip会发送访问百度的ip为代理ip。而访问bing时则不会对请求增加代理。
const puppeteer = require('puppeteer');
const useProxy = require('puppeteer-page-proxy');
(async () => {
const browser = await puppeteer.launch({
args: [
'--disable-setuid-sandbox',
'--no-sandbox',
'--ignore-certificate-errors',