Iri*_*ina 7 javascript proxy node.js puppeteer
请告诉我如何正确地使用带有伪造者和无头Chrome的代理。我的选择不起作用。
const puppeteer = require('puppeteer');
(async () => {
const argv = require('minimist')(process.argv.slice(2));
const browser = await puppeteer.launch({args: ["--proxy-server =${argv.proxy}","--no-sandbox", "--disable-setuid-sandbox"]});
const page = await browser.newPage();
await page.setJavaScriptEnabled(false);
await page.setUserAgent(argv.agent);
await page.setDefaultNavigationTimeout(20000);
try{
await page.goto(argv.page);
const bodyHTML = await page.evaluate(() => new XMLSerializer().serializeToString(document))
body = bodyHTML.replace(/\r|\n/g, '');
console.log(body);
}catch(e){
console.log(e);
}
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
Chu*_*ran 19
您可以在此处找到有关代理的示例
'use strict';
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch({
// Launch chromium using a proxy server on port 9876.
// More on proxying:
// https://www.chromium.org/developers/design-documents/network-settings
args: [ '--proxy-server=127.0.0.1:9876' ]
});
const page = await browser.newPage();
await page.goto('https://google.com');
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
Cua*_*rix 12
puppeteer-page-proxy是可能的。它支持为整个页面设置代理,或者如果您愿意,它可以为每个请求设置不同的代理。是的,它适用于无头和有头的 Chrome。
首先安装它:
npm i puppeteer-page-proxy
Run Code Online (Sandbox Code Playgroud)
然后要求它:
npm i puppeteer-page-proxy
Run Code Online (Sandbox Code Playgroud)
使用它很容易; 为整个页面设置代理:
const useProxy = require('puppeteer-page-proxy');
Run Code Online (Sandbox Code Playgroud)
如果您想为每个请求使用不同的代理,那么您可以简单地执行以下操作:
await useProxy(page, 'http://127.0.0.1:8000');
Run Code Online (Sandbox Code Playgroud)
然后如果你想确定你的页面的IP有没有变,你可以查一下;
await page.setRequestInterception(true);
page.on('request', req => {
useProxy(req, 'socks5://127.0.0.1:9000');
});
Run Code Online (Sandbox Code Playgroud)
它支持http、https、socks4和socks5代理,如果需要,它还支持身份验证:
const data = await useProxy.lookup(page);
console.log(data.ip);
Run Code Online (Sandbox Code Playgroud)
存储库:https : //github.com/Cuadrix/puppeteer-page-proxy
小智 11
不使用
"--proxy-server =${argv.proxy}"
Run Code Online (Sandbox Code Playgroud)
这是一个普通的字符串而不是模板文字,
使用 ` 而不是 "
`--proxy-server =${argv.proxy}`
Run Code Online (Sandbox Code Playgroud)
否则argv.proxy不会被替换
在你将它传递给启动函数之前检查这个字符串以确保它是正确的,你可能想要在该浏览器中访问http://api.ipify.org/以确保代理正常工作
小智 7
我看到上面推荐的https://github.com/Cuadrix/puppeteer-page-proxy和https://github.com/gajus/puppeteer-proxy,我想强调的是,这两个包在技术上并没有使用 Chrome 实例来执行实际的网络请求,这是他们正在做的事情:
page.goto(),代理包会拦截此传出的 HTTP 请求并暂停它虽然这在很多情况下可能是一种可行的方法,但您需要了解这会更改您的 HTTP 请求 TLS 指纹,因此您的 HTTP 请求可能会被某些网站阻止,特别是那些使用 Cloudflare 机器人检测的网站(因为该网站现在看到您的请求源自 Node.js,而不是 Chrome)。
如果您想对所有网站使用一个代理,Chrome 的启动参数会很好。如果您仍然想让一个 Chrome 实例使用多个代理,但又不想使用上面提到的 2 个包,该怎么办?
createIncognitoBrowserContextPuppeteer 功能可用于救援:
// Create a new incognito browser context
const context = await browser.createIncognitoBrowserContext({ proxy: 'http://localhost:2022' });
// Create a new page inside context.
const page = await context.newPage();
// authenticate in proxy using basic browser auth
await page.authenticate({username:user, password:password});
// ... do stuff with page ...
await page.goto('https://example.com');
// Dispose context once it's no longer needed.
await context.close();
Run Code Online (Sandbox Code Playgroud)
如果您的代理需要身份验证,并且您不喜欢该调用,则可以使用proxy-chain npm packagepage.authenticate设置代理。
proxy-chain 在您的本地主机上启动中间代理,这允许做一些不错的事情。了解有关代理链包实现的技术细节的更多信息:https://pixeljets.com/blog/how-to-set-proxy-in-puppeteer
| 归档时间: |
|
| 查看次数: |
13024 次 |
| 最近记录: |