首页 > 解决方案 > Puppeteer 机器人检测

问题描述

我正在尝试使用 puppeteer 登录到 nike 网站,但我收到错误可能是由于反机器人。我已经尝试了一些方法来避免被检测到,但没有任何运气。这是我的代码:

//const puppeteer = require('puppeteer');
const puppeteer = require("puppeteer-extra");
const pluginStealth = require("puppeteer-extra-plugin-stealth");
puppeteer.use(pluginStealth());

//Create Sleep function to use in Async/Await function
function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
 }

 const randomDelay = (min, max) =>
  Math.floor(Math.random() * (max - min + 1) + min);
  
(async () => {

  await sleep(1000);

  var browser;

  browser = await puppeteer.launch({
    executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
    headless: false,
    args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security'],
  });

  const page = await browser.newPage();
  await page.setUserAgent(
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
  );
  await page.setExtraHTTPHeaders({
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
  });
  await page.goto('https://www.nike.com/us/en_us/e/nike-plus-membership', {
    waitUntil: 'networkidle0',
  });


    const emailSelector = '.nike-unite-text-input.emailAddress input';
    await page.waitFor(emailSelector);
    await page.waitFor(randomDelay(300, 600));

    const inputs = [emailSelector, '.nike-unite-text-input.password input'];

          await page.type(inputs[0], 'xyz@gmail.com', {
            delay: randomDelay(200, 300),
          });
      
          await page.waitFor(randomDelay(300, 600));
          await page.type(inputs[1], 'XYZDEFEWD!"', {
            delay: randomDelay(200, 300),
          });
      
          const submitBtn = '.nike-unite-submit-button.loginSubmit input';

          await page.waitFor(randomDelay(200, 500));

          await page.click(submitBtn);

})();

有什么方法可以识别网站使用什么来检测我正在使用 puppeteer?

标签: puppeteer

解决方案


可能有避免机器人检测的完整证明解决方案,但这里有一些你可以尝试的方法

  1. 尝试通过多个国家/地区代理您的 IP

  2. 尝试在 n/w 调用中添加随机间隔

  3. 使用随机用户代理而不是固定用户代理,并更改视口大小。


推荐阅读