我知道在js中使用Puppeteer是可能的,但我想知道是否有人已经知道如何在PuppeteerSharp (不同选项卡的不同代理)的页面级别上进行代理?
我似乎可以捕捉到请求,但我不知道如何调整代理。
page.SetRequestInterceptionAsync(true).Wait();
page.Request += (s, ev) =>
{
// what to do?
}编辑
我知道我可以像这样在浏览器级别设置代理;
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = false,
Args = new[] { "--proxy-server=host:port" }
});
var page = await browser.NewPageAsync();
await page.AuthenticateAsync(new Credentials() { Username = "username", Password = "password" });但这不是我想做的。我试图在单个浏览器实例中为每个页面设置代理。我想测试很多代理,所以只为了设置代理而生成一个新的浏览器实例的开销太大了。
发布于 2021-03-16 11:49:42
您可以对每个逻辑实例使用不同的浏览器实例。我的意思是,与其尝试用不同的代理为每个页面/选项卡设置不同的代理,不如创建新的浏览器实例并通过启动args设置代理。
如果此解决方案不适合您的需要,请检查此问题。NodeJS有一个库,它使每个页面/选项卡能够使用不同的代理。您可以检查该库源代码并在您的C#应用程序中实现相同的功能。
那个图书馆正在使用非常简单的方法。而不是通过puppeter的浏览器/页面库发送请求,而是通过nodejs http工具发送请求。它可以用page.setRequestInterception方法来实现。因此库从页面截取每个请求,然后收集数据并通过http工具发送请求。我很久以前就使用C#了。所以也许我错了,但是您可以尝试使用HttpWebRequest或类似的东西。得到结果后,应该使用request.respond方法,并在那里传递响应结果。通过这种方式,您可以在应用程序中放置任何类型的代理。检查库的这里代码。
https://stackoverflow.com/questions/66642980
复制相似问题