我的点击事件不会导致导航,我怎么知道事件是用Puppeteer完成的?

时间:2018-05-29 21:29:39

标签: javascript node.js web-scraping puppeteer

嗨我试图从表中捕获信息,但是这个表有一个分页按钮(" next,prev")当我点击下一个按钮时没有导致导航(只是创建一个POST)请求返回一个新的HTML表格。

到目前为止,我最好的想法是:

1)当我点击下一个按钮时,这会导致POST(不是导航)如何在尝试从下一页再次捕获数据之前等待此POST完成?

2)也许我可以检测到表元素的一些变化,但我不知道如何

3)解决这个问题的最佳方法是什么?

现在我这样做:

  while (await page.$(NEXT_BUTTON_SELECTOR) !== null) {
   await page.click(NEXT_BUTTON_SELECTOR);
   await page.waitFor(2 * 1000);
   pageTableArray = getData();
}

但是我不相信,我希望能找到一些让我疯狂的帮助

谢谢!

2 个答案:

答案 0 :(得分:1)

如果await page.click(NEXT_BUTTON_SELECTOR);导致页面加载发生,那么脚本中接下来发生的任何事情都将丢失。要绕过你必须做的事情:

page.click(NEXT_BUTTON_SELECTOR); // Notice no `await`
await page.waitForNavigation();

docs page here查看有关该API的更多信息!

答案 1 :(得分:1)

您可以使用事件requestfinished来捕获数据。



const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', req => {
    console.log('request:', req.url())
    req.continue();
});
page.on('requestfinished', (req) => {
    console.log('finished:', req.url())
});
page.on('requestfailed', (req) => {
    console.log('failed:', req.url())
})
await page.goto(url);
await page.click(selector);