proxy - 使用 Puppeteer 每页使用不同的代理
问题描述
在 Puppeteer 浏览器中为每页设置代理
使用 For of 循环为每个自动化实例创建一个新页面,但是在两个页面加载并截取屏幕截图后,无论第一个实例首先开始自动化,它都会接管并且只有自动化发生。
根据我所见设置标志仅在创建新浏览器时可行,例如。
const browser = await puppeteer.launch({args:['--proxy-server=ip:port']});
似乎找不到任何关于通过页面设置它的文档。
解决方案
我做了一个模块来做到这一点。它被称为puppeteer-page-proxy。它支持为整个页面设置代理,或者如果您愿意,它可以为每个请求设置不同的代理。
首先安装它:
npm i puppeteer-page-proxy
然后要求它:
const useProxy = require('puppeteer-page-proxy');
使用起来很容易; 为整个页面设置代理:
await useProxy(page, 'http://127.0.0.1:8000');
如果您想为每个请求使用不同的代理,那么您可以简单地执行以下操作:
await page.setRequestInterception(true);
page.on('request', req => {
useProxy(req, 'socks5://127.0.0.1:9000');
});
然后如果你想确定你的页面的IP已经改变了,你可以查一下;
const data = await useProxy.lookup(page);
console.log(data.ip);
它支持http、https、socks4和socks5代理,如果需要,它还支持身份验证:
const proxy = 'http://login:pass@127.0.0.1:8000'
推荐阅读
- java - 调用相同的模拟方法时如何返回不同的结果?
- python - 你如何计算二维张量的每一行的掩码平均值?
- javascript - 这个作业在 javascript 中做了什么?
- jquery - 选择动态内部元素,而不是静态容器
- sql - 从数据表中读取的 Powershell 脚本在找到值中的句号时出错
- report - 在没有命令行参数的 pytest 中自动生成 html 报告
- performance - 在 Common Lisp 中,函数和宏之间是否存在性能差异?
- bash - 如何在 git-bash 和 Visual Studio 17 中使用本地 devenv deploy 命令?
- c# - 如何通过 Flurl MultipartFormDataContent 将附件发布到 BIM 360 字段
- android - 在自定义图块上使用 Google Maps KML Importing Utility