javascript 如何在puppeteer和无头Chrome中使用代理?

djmepvbi  于 2022-12-17  发布在  Java
关注(0)|答案(7)|浏览(388)

请告诉我如何正确使用代理与傀儡和Headless Chromium 。我的选项不起作用。

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();
})();
gc0ot86w

gc0ot86w1#

您可以在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();
})();
dwbf0jvd

dwbf0jvd2#

这在puppeteer-page-proxy上是可以实现的。它支持为整个页面设置代理,或者如果你愿意,它可以为每个请求设置不同的代理。是的,它在headless和headful Chrome上都可以使用。
首先安装:

npm i puppeteer-page-proxy

然后要求:

const useProxy = require('puppeteer-page-proxy');

**使用方便;**为整个页面设置代理:

await useProxy(page, 'http://127.0.0.1:8000');

如果您希望为每个请求使用不同的代理,那么您可以简单地执行以下操作:

await page.setRequestInterception(true);
page.on('request', req => {
    useProxy(req, 'socks5://127.0.0.1:9000');
});

然后,如果你想确定你的网页的IP已经改变,你可以查找它;

const data = await useProxy.lookup(page);
console.log(data.ip);

它支持httphttpssocks 4socks 5代理,并且如果需要,它还支持身份验证:

const proxy = 'http://login:pass@127.0.0.1:8000'

存储库:https://github.com/Cuadrix/puppeteer-page-proxy

dw1jzc5e

dw1jzc5e3#

不使用

"--proxy-server =${argv.proxy}"

这是常规字符串而不是模板文本
用'代替“

`--proxy-server =${argv.proxy}`


否则将不替换argv.proxy
检查这个字符串在你传递它到launch函数之前,以确保它是正确的,并且你可能想要在浏览器中访问http://api.ipify.org/以确保代理正常工作

unhi4e5o

unhi4e5o4#

如果要对每个页面使用不同代理,请尝试this,使用https-proxy-agent或https-proxy-agent代理每个页面的请求

col17t5w

col17t5w5#

您可以使用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-proxyPage可以有多个代理。

xghobddn

xghobddn6#

您可以在Private Proxy上找到代理列表,并将其与下面的代码一起使用

const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');

(async() => {
   // Proxies List from Private proxies
    const proxiesList = [
                'http://skrll:au4....',
                ' http://skrll:au4....',
                ' http://skrll:au4....',
                ' http://skrll:au4....',
                ' http://skrll:au4....',
     ];
    
    const oldProxyUrl = proxiesList[Math.floor(Math.random() * (proxiesList.length))];
    const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);
    
    const browser = await puppeteer.launch({
            headless: true,
            ignoreHTTPSErrors: true,
            args: [
              `--proxy-server=${newProxyUrl}`,
              `--ignore-certificate-errors`,
              `--no-sandbox`,
              `--disable-setuid-sandbox`
            ]
     });

    const page = await browser.newPage();
    await page.authenticate();

    // 
    // you code here
    //
     
    // close proxy chain
    await proxyChain.closeAnonymizedProxy(newProxyUrl, true);
})();

你可以找到完整的职位here

0ejtzxu1

0ejtzxu17#

根据我的经验,以上失败的原因各不相同。我发现在整个操作系统上应用代理每次都是有效的。我没有遇到代理失败的情况。这个策略在Windows和Linux上都有效。
这样,我得到零puppeteer机器人失败。请记住,我旋转了7000机器人每服务器。我运行这个在7个服务器上。

相关问题