关于Puppeteer设置代理时遇到的问题及解决方法

Puppeteer介绍

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。在创建 browser时,可通过传入配置项实现无头模式的控制,如下:

const puppeteer = require('puppeteer');
 
const browser = puppeteer.launch({ headless: false })
// 为false表示不开启无头模式,则运行程序时,会有puppeteer的内核浏览器开启运行,模拟页面操作
// 当关闭无头模式后,可能会导致电脑闪屏,也是偶发的,反正我的电脑是会这样

Puppeteer设置代理IP的多种方法

1.通过启动参数设置代理

通过puppeteer启动浏览器通常可以指定参数,通过--proxy-server参数指定代理。这种方法每次需要更换代理就需要重新通过launch方法来启动浏览器。(注意:设置参数时不能有空格。另外实际使用发现不需要指定具体的协议,只需要指定地址和端口无论是socket5还是http协议的代理都可使用)。如果代理IP有验证请通过await page.authenticate({'username': '账号', 'password': '密码'})。

const browser = await puppeteer.launch({
    args: [
     ['--proxy-server=1.1.1.1:1080'] // 这里的1.1.1.1:1080举一个例子换成你实际的代理IP
    ],
    ignoreHTTPSErrors: true,
    headless: false,
});

await page.authenticate({'username': '账号', 'password': '密码'})

2.通过拦截请求实现代理功能

过puppeteer的拦截器功能,将请求拦截,随后改写请求。再通过第三方的http库设置上代理信息。这样就可以达到不通过launch重启浏览器而是直接在一个page中设置代理的目的。每次有新请求来了也可以达到动态变化的目标。不过这样处理逻辑还是比较复杂,设计改写请求,响应结果缓存处理等问题。这里介绍一个第三方库来实现拦截请求并设置代理的功能:

const puppeteer = require('puppeteer');

// 这里建议使用'@lem0-packages/puppeteer-page-proxy'而不是'puppeteer-page-proxy'
// 同时puppeteer的版本需要22以上(注意22以上的puppeteer版本不支持waitForXpath功能)
const useProxy  = require('@lem0-packages/puppeteer-page-proxy');
const browser     = await puppeteer.launch({});

const page  = await browser.newPage();
await useProxy(page, 'http://账号:密码@119.5.228.105:21477')

具体使用过程中发现,useProxy某些网站可能会出现资源无法加载的情况,建议可以尝试去更改库中的源码来解决。

3.通过puppeteer-extra库实现代理设置

通过代理插件可以配置 Puppeteer 使用代理服务器:

const puppeteer = require('puppeteer-extra');
const ProxyPlugin = require('puppeteer-extra-plugin-proxy');
 
puppeteer.use(
  ProxyPlugin({
    address: 'proxy.example.com',
    port: 1234,
    credentials: {
      username: 'your-username',
      password: 'your-password'
    }
  })
);
 
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  // 执行其他操作
  await browser.close();
})();

总结

设置puppeteer代理有多种方法,博主具体实践下来,通过启动参数来设置代理是比较好的,虽然每次切换代理IP需要重启浏览器,但是相较于其他的方法更加稳定靠谱。另外如果是国外代理IP,可能需要电脑本身处于一个海外环境,不然会出现代理连接不上的问题,具体如何实现海外环境的效果,这里建议不要使用小猫,可能无法实现海外环境的效果,可以使用Nord或者Lets。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值