请问这个是否可能?
我想使用多个代理,并在代理拒绝连接时自动更换代理。
args: [
'--proxy-server=127.0.0.1:9876', // Or whatever the address is
]
所以,使用这个方法,您可以使用一个代理,但如何使用多个代理并在连接被拒绝时自动更改呢?
您可以安装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地址是否不同是个好主意。
page.on('response'
检查每个请求,包括 css、图片和 js 的请求。因此,如果你访问任何现代网页,你可能会轻松地检查到 10-20 个请求,并且其中很多请求的状态并不是ok()
,所以你最终会比通常更频繁地切换。 - Aarmora