使用 puppeteer 绕过 Cloudflare

atu*_*ola 8 captcha bots cloudflare google-chrome-headless puppeteer

我正在尝试使用 puppeteer 抓取某个网站的一些初创公司数据,当我尝试导航到下一页时,cloudflare 等待屏幕出现并中断抓取。我尝试更改IP,但还是一样。有没有办法用 puppeteer 绕过它。

(async () => {

  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: null,
  });

  const page = await browser.newPage();

  page.setDefaultNavigationTimeout(0);

  let links = [];

  // initial page

  await page.goto(`https://www.startupranking.com/top/india`, {
    waitUntil: "networkidle0",
  });

  // looping through the url to different pages

  for (let i = 2; i <= 7; i++) {
    if (i === 3) {
      console.log("waiting");

      await page.waitFor(20000);

      console.log("waited");
    }

    const onPageLinks = await page.$$eval("tr .name a", (arr) =>
      arr.map((cur) => cur.href)
    );

    links = links.concat(onPageLinks);

    console.log(onPageLinks, "inside loop");

    await page.goto(`https://www.startupranking.com/top/india/${i}`, {
      waitUntil: "networkidle0",
    });
  }

  console.log(links, links.length, "outside loop");
})();
Run Code Online (Sandbox Code Playgroud)

因为它只是检查第一个循环,所以我放入了 waitFor 来绕过检查所需的时间,它在某些 IP 上工作正常,但在其他 IP 上它给出了需要解决的挑战,我必须在服务器上运行它,所以我在想完全绕过它。