首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crawlera代理木偶师

Crawlera代理木偶师
EN

Stack Overflow用户
提问于 2018-01-03 20:19:32
回答 4查看 2.6K关注 0票数 2

我无法通过具有身份验证的代理提出木偶师请求。

尝试了两个代理url身份验证:--proxy-server=u:p@proxy.crawlera.com:8010

还有木偶师page.authenticate(u,p)

还能得到ERR_NO_SUPPORTED_PROXIES

我的代码:

代码语言:javascript
复制
require('dotenv').config();
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    ignoreHTTPSErrors: true,
    args: ['--proxy-server=proxy.crawlera.com:8010']
  });

  const page = await browser.newPage();
  await page.setExtraHTTPHeaders({
    'Proxy-Authorization':
      'Basic ' +
      Buffer.from(`${process.env.CRAWLERA_APIKEY}:`).toString('base64')
  });

  page.on('console', (...args) => console.log('PAGE LOG:', ...args));
  const path = `https://www.andersonassociates.net/`;
  await page.setViewport({ width: 1680, height: 895 });

  try {
    console.log('before-goto', path);
    var start = +new Date();
    var resp = await page.goto(path, {
      timeout: 0,
      waitUntil: 'domcontentloaded'
    });

    console.log('after-goto', path);
    var end = +new Date();
    console.log('start-end-diff', (end - start) / 1000);

    if (!resp.ok) {
      browser.close();
      return { status: resp.status, error: `ASIN NOT OK. ${resp.status}` };
    }
    console.log('goto', path);
  } catch (error) {
    console.log('page.goto ERROR', error.stack.split('\n'));
    browser.close();
    return { error: error.toString(), stack: error.stack.split('\n') };
  }

  try {
    await page.screenshot({ path: `tmp/anderson.png`, fullPage: true });
    console.log('screenshot');
    browser.close();
  } catch (e) {
    browser.close();
    console.log('screenshot error', e.stack.split('\n'));
  }
})();

更新!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-07 04:53:11

我也使用Crawlera作为我的代理服务,已经使用了代理链& page.authenticate方法,但是没有运气,我认为是由于Crawlera提供了一个空密码,所以我使用page.setExtraHTTPHeaders解决了问题。

代码语言:javascript
复制
const browser = await puppeteer.launch({
    ignoreHTTPSErrors: true, // To allow https url
    args: ['--proxy-server=proxy.crawlera.com:8010']
});
const page = await browser.newPage();
await page.setExtraHTTPHeaders({
    'Proxy-Authorization': 'Basic ' + Buffer.from('<APIKEY>:').toString('base64'),
});

希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2018-01-04 16:03:22

您可以对其使用代理链 npm包。

示例:

代码语言:javascript
复制
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');

(async() => {
    const oldProxyUrl = 'http://u:p@proxy.crawlera.com:8010';
    const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);

    // Prints something like "http://127.0.0.1:45678"
    console.log(newProxyUrl);

    const browser = await puppeteer.launch({
        args: [`--proxy-server=${newProxyUrl}`],
    });

})();

您可以在博客中阅读更多有关它的信息。

票数 3
EN

Stack Overflow用户

发布于 2018-01-04 15:43:40

你能提供你正在做的事情的代码样本吗?

请记住,page.authenticate需要将一个对象传递给函数。在做其他事情之前,必须先设置凭据。

你可以试试这样的方法:

代码语言:javascript
复制
await page.authenticate({username, password});
await page.goto(myURL, {waitUntil: 'networkidle0'});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48084554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档