【问题标题】:Puppeteer browser useragent listPuppeteer 浏览器用户代理列表
【发布时间】:2021-11-26 02:39:46
【问题描述】:

我想从我的默认位置路径加载随机的用户代理列表,例如:'agents.json',而不是直接添加仅 1 个用户代理。

agents.json

["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/79.0.3945.73 Mobile/15E148 Safari/604.1"]

我的代码:

const puppeteer = require('../core/puppeteer');
const referers = require('../core/referers.json');
const referers = require('../core/agents.json');
const viewVideosInBatch = async ({ targetUrls, durationInSeconds, port }) => {
  let browser;
  try {
    browser = await puppeteer.getBrowserInstance(port);
    const randomReferer = referers[Math.floor(Math.random() * referers.length)];
    const randomAgents = agents[Math.floor(Math.random() * agents.length)];
    const page = await browser.newPage();
    browser = await page.setUserAgent({ agents: randomAgents });
    page.setDefaultTimeout(PAGE_DEFAULT_TIMEOUT * 1000);
    page.on('error', handlePageCrash(page));
    page.on('pageerror', handlePageCrash(page));
    page.setExtraHTTPHeaders({ referer: randomReferer });

    await page.setViewport({
      width: 640,
      height: 480,
      deviceScaleFactor: 1,
    });
    const ipAddr = await getCurrentIP(page);
    const targetUrlsForAction = _take(_shuffle(targetUrls), VIEW_ACTION_COUNT);
    await watchVideosInSequence(page, ipAddr, targetUrlsForAction, durationInSeconds);
    await page.close();
  } catch (error) {
    logger.warn('Entire view action in a batch failed.');
    logger.debug(error);
  } finally {
    await browser.close();
  }
};

我得到的错误:

(node:1) UnhandledPromiseRejectionWarning: Error: Protocol error (Network.setUserAgentOverride): Target closed.
view_4  |     at /app/node_modules/puppeteer/lib/Connection.js:183:56
view_4  |     at new Promise (<anonymous>)
view_4  |     at CDPSession.send (/app/node_modules/puppeteer/lib/Connection.js:182:12)
view_4  |     at next (/app/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:30:43)
view_4  |     at CDPSession.send (/app/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:46:18)
view_4  |     at Plugin.onPageCreated (/app/node_modules/puppeteer-extra-plugin-stealth/evasions/user-agent-override/index.js:75:18)
view_4  |     at runMicrotasks (<anonymous>)
view_4  |     at processTicksAndRejections (internal/process/task_queues.js:97:5)
view_4  |     at async Plugin._onTargetCreated (/app/node_modules/puppeteer-extra-plugin/dist/index.cjs.js:491:17)
view_4  | (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 79)

【问题讨论】:

    标签: javascript puppeteer user-agent


    【解决方案1】:

    您似乎在设置 UA 时重新声明了浏览器,但您不应该这样做。此外,您不需要将其设置为对象:page.setUserAgent 接受字符串:page.setUserAgent(userAgent)

    await page.setUserAgent(randomAgent); 会很好。

    const browser = await puppeteer.getBrowserInstance(port);
    const randomReferer = referers[Math.floor(Math.random() * referers.length)];
    const randomAgent = agents[Math.floor(Math.random() * agents.length)]; // made it singular instead of plural
    const page = await browser.newPage();
    await page.setUserAgent(randomAgent); // like this
    page.setDefaultTimeout(PAGE_DEFAULT_TIMEOUT * 1000);
    page.on('error', handlePageCrash(page));
    page.on('pageerror', handlePageCrash(page));
    page.setExtraHTTPHeaders({ referer: randomReferer });
    

    注意:我认为这只是你的帖子中的一个错误,但你还有两个名为referers的const,这个应该是agents

    const referers = require('../core/agents.json');
    

    【讨论】:

    • 是的,你又完全正确了 :) 哈哈,但我不明白这一点:// 用单数代替复数,你能解释一下吗?
    • json 应该在 " " OR ' ' 中加载用户代理
    • 抱歉现在不能接受答案,我收到异常错误:SyntaxError: /app/core/agents.json: Unexpected token ' in JSON at position 1 |解析时()
    • 复数到单数我的意思是:randomAgents => randomAgent 最后没有's',因为它只是一个用户代理值,而不是更多代理。在 JSON 中(如果我正确理解您的第二条评论),您应该始终使用双引号“”,意外的标记可能是由于单引号引起的语法错误。
    • 嗨,是的,这是一个单引号问题,现在如果我添加移动 ipad 用户代理页面浏览器崩溃并抛出一些错误:Error: EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'report-sample' 'nonce-4/lYxaZ4FmRH/FosJwePuw' 'unsafe-inline'". 知道为什么吗?再次感谢
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2020-05-10
    • 2021-04-23
    • 2012-09-25
    • 2015-12-13
    • 1970-01-01
    • 2021-02-13
    • 2011-04-02
    相关资源
    最近更新 更多