嗨我试图从表中捕获信息,但是这个表有一个分页按钮(" 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();
}
但是我不相信,我希望能找到一些让我疯狂的帮助
谢谢!
答案 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);