Puppeteer 如何使用多个代理并在代理连接失败时自动更换代理?

8

请问这个是否可能?

我想使用多个代理,并在代理拒绝连接时自动更换代理。

args: [
    '--proxy-server=127.0.0.1:9876', // Or whatever the address is
]

所以,使用这个方法,您可以使用一个代理,但如何使用多个代理并在连接被拒绝时自动更改呢?
1个回答

13

使用Tor。

您可以安装tor软件包,这将允许您通过Tor网络浏览,并非常轻松地更改您的身份(IP地址)。

使用--proxy-server标志启动Puppeteer与Tor一起使用:

const browser = await puppeteer.launch({
  args: [
    '--proxy-server=socks5://127.0.0.1:9050',
  ],
});

然后,在 page.on('response') 中,如果响应不成功( response.ok() === false ),使用 child_process.exec() 更改代理。

以下命令将创建一个新的Tor身份:

(echo authenticate \'""\'; echo signal newnym; echo quit) | nc localhost 9051

示例用法:

'use strict';

const puppeteer = require('puppeteer');
const exec = require('child_process').exec;

(async () => {
  const browser = await puppeteer.launch({
    args: [
      '--proxy-server=socks5://127.0.0.1:9050'
    ],
  });
  const page = await browser.newPage();
  let current_ip_address = '';
  
  page.on('response', response => {
    if (response.ok() === false) {
      exec('(echo authenticate \'""\'; echo signal newnym; echo quit) | nc localhost 9051', (error, stdout, stderr) => {
        if (stdout.match(/250/g).length === 3) {
          console.log('Success: The IP Address has been changed.');
        } else {
          console.log('Error: A problem occured while attempting to change the IP Address.');
        }
      });
    } else {
      console.log('Success: The Page Response was successful (no need to change the IP Address).');
    }
  });
  
  await page.goto('http://checkip.amazonaws.com/');
  
  current_ip_address = await page.evaluate(() => document.body.textContent.trim());
  
  console.log(current_ip_address);
  
  await browser.close();
})();

注意: Tor可能需要一段时间才能更换身份,因此在继续进行您的程序之前验证IP地址是否不同是个好主意。


感谢您提供这段代码片段。请问您知道它是否能与无头Chrome实例一起使用吗?我想在运行Node.js的虚拟服务器上使用Puppeteer和Tor。这种设置有什么需要注意的地方吗?谢谢。 - Dominik
2
你在这里的东西真棒。我试着实现它,效果非常好。但需要注意的是,page.on('response' 检查每个请求,包括 css、图片和 js 的请求。因此,如果你访问任何现代网页,你可能会轻松地检查到 10-20 个请求,并且其中很多请求的状态并不是 ok(),所以你最终会比通常更频繁地切换。 - Aarmora
我想补充一点,如果你正在使用Mac OSX,首先需要为Tor创建一个哈希密码,并按照此处所述(https://cuyu.github.io/other/2016/05/26/Install-and-setup-Tor)更新/usr/local/etc/tor/torrc文件,以使其正常工作。 - Josep Alsina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接