我正在尝试使用puppeteer抓取网站的一些启动数据,并且当我尝试导航至下一页时,cloudflare等待屏幕进入并破坏了抓取工具。我尝试更改IP,但仍然相同。有没有办法用p操纵者绕过它。
(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");
})();
由于它仅检查我放入waitFor的第一个循环以绕过检查所需的时间,因此它在某些IP上可以正常工作,但在另一些IP上却需要解决,因此我必须在服务器上运行它,因此我正在考虑完全绕开它。