请告诉我如何正确地使用带有伪造者和无头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();
})();
答案 0 :(得分:10)
您可以在here上找到有关代理的示例
'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();
})();
答案 1 :(得分:8)
puppeteer-page-proxy是可能的。 它支持为整个页面设置代理,也可以根据需要为每个请求设置不同的代理。是的,它可以在无头和无头Chrome中使用。
首先安装它:
error: no matching function for call to ‘each(std::vector<std::vector<int> >&, main()::<lambda(int&)>)’
然后要求它:
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
template <class VarType>
void each(vector<vector<VarType>> &ve, function<void (VarType &)> action) {
for(vector<VarType> &v : ve) {
for(VarType &p : v) {
action(p);
}
}
}
int main() {
vector<vector<int>> map(5);
for(vector<int> &ve : map) {
ve.resize(4);
}
each(map, [](int &val) {
val = 1;
});
}
使用起来很简单; 设置整个页面的代理:
npm i puppeteer-page-proxy
如果您要为每个请求使用不同的代理,则只需执行以下操作:
const useProxy = require('puppeteer-page-proxy');
然后,如果您要确保页面的IP已更改,可以进行查找;
await useProxy(page, 'http://127.0.0.1:8000');
它支持 http , https , socks4 和 socks5 代理,如果支持,则还支持身份验证需要:
await page.setRequestInterception(true);
page.on('request', req => {
useProxy(req, 'socks5://127.0.0.1:9000');
});
答案 2 :(得分:0)
如果您要为每个页面使用不同的代理,请尝试this,使用https-proxy-agent或http-proxy-agent代理每个页面的请求
答案 3 :(得分:0)
请勿使用
"--proxy-server =${argv.proxy}"
这是普通字符串,而不是模板文字
用`代替“
`--proxy-server =${argv.proxy}`
否则argv.proxy
将不会被替换
在将此字符串传递给启动函数之前检查此字符串,以确保它是正确的
并且您可能想在该浏览器中访问http://api.ipify.org/以确保代理正常工作
答案 4 :(得分:0)
您可以使用https://github.com/gajus/puppeteer-proxy为整个页面或仅针对特定请求设置代理,例如
import puppeteer from 'puppeteer';
import {
createPageProxy,
} from 'puppeteer-proxy';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const pageProxy = createPageProxy({
page,
proxyUrl: 'http://127.0.0.1:3000',
});
await page.setRequestInterception(true);
page.once('request', async (request) => {
await pageProxy.proxyRequest(request);
});
await page.goto('https://example.com');
})();
要跳过代理,只需有条件地调用request.continue()
。
使用puppeteer-proxy Page
可以有多个代理。