【问题标题】:Puppeteer Use Multiple Proxies and Change Automatic Proxy if Proxy Refused ConnectionPuppeteer 使用多个代理并在代理拒绝连接时更改自动代理
【发布时间】:2018-02-13 14:21:24
【问题描述】:

你能告诉我这是否可能吗?

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

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

因此,您可以使用一个代理,但是如何使用多个并在拒绝连接时让它自动更改?

【问题讨论】:

    标签: node.js proxy puppeteer


    【解决方案1】:

    使用 Tor。

    您可以install the tor package,这将允许您通过 Tor 网络使用 Puppeteer 进行浏览,并非常容易地更改您的身份(IP 地址)。

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

    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 地址是否不同可能是一个不错的调用。

    【讨论】:

    • 感谢先生提供此代码 sn-p。您是否知道它是否适用于无头 chrome 实例?我想在运行 node.js 的虚拟服务器上使用 puppeteer 和 tor。这种设置有什么奇怪的地方吗?
    • 这里的东西太棒了。我去实施它,它工作得很好。不过应该注意的是,page.on('response' 会检查每个请求,包括那些针对 css、图像、js 的请求。因此,如果您访问任何现代网页,您很可能会收到 10 到 20 个要检查的请求,其中很多请求的状态不是ok(),因此您最终切换的频率比您通常想要的要高。跨度>
    • 我想补充一点,如果您首先使用 Mac OSX,您需要为 Tor 创建一个散列密码并按照此处所述更新 /usr/local/etc/tor/torrc 文件 (cuyu.github.io/other/2016/05/26/Install-and-setup-Tor ) 让它工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多