【发布时间】:2021-02-25 05:36:09
【问题描述】:
最近我正在使用他们的文档学习 puppeteer,并尝试抓取一些信息。
第一种方法
首先我从主页收集了一个 url 列表。 第二次 我创建了一个新标签页,然后反复访问这些网址并收集一些数据。我怀疑当我进入循环时,新选项卡没有按我的预期工作,并且在没有提供任何数据的情况下冻结。最终我得到了一个错误TimeoutError: Navigation timeout of 30000 ms exceeded。有没有更好的办法?
(async () => {
const browser = await puppeteer.launch({ headless: true });
const mainpage = await browser.newPage();
console.log('goto main page'.green);
await mainpage.goto(mainURL);
console.log('collecting some url'.green);
const URLS = await mainpage.evaluate(() =>
Array.from(
document.querySelectorAll('.result-actions a'),
(element) => element.href
)
);
if (typeof URLS[0] === 'string') console.log('OK'.green);
console.log('collecting finished'.green);
const newTab= await browser.newPage();
console.log('create new tab'.green);
var data = [];
for (let i = 0, n = URLS.length; i < n; i++) {
//console.log(URLS[i]);
// use this new tab to collect some data then close this tab
// continue this process
await newTab.waitForNavigation();
await newTab.goto(URLS[i]);
await newTab.waitForSelector('.profile-phone-column span a');
console.log('Go each url using new tab'.green);
// collecting data
data.push(collected_data);
// close this tab
await collectNamePage.close();
console.log(data);
}
await mainpage.close();
await browser.close();
console.log('closing browser'.green);
})();
第二种方法
这次我想跳过使用新标签收集这些数据的部分。因此,我使用page.$$() 收集我的网址并尝试使用for...of 迭代urls 并使用elementHandle.$(selector) 收集我的数据,但这种方法也失败了。
我越来越沮丧。是我做错了还是我不理解他们的文档?
【问题讨论】:
标签: puppeteer