我有一个NodeJS Typescript项目,我正试图从动态渲染的网站中获取所有的"p"标记(不是静态HTML,而是向后端发出多个请求以获取一些数据并渲染网页(。我使用的是typescript,在我的lib中有["es6","dom"],我有以下代码(这是迄今为止我在项目中的所有代码(:
import puppeteer from 'puppeteer';
const getLinks = async () => {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto('https://webscraper.io/test-sites', { waitUntil: 'networkidle0' });
const links = await page.evaluate(() => document.querySelectorAll('p'));
console.log(links);
await browser.close();
}
然而,当我打印links
时,我一直得到undefined
。我想这是因为程序找不到任何"p"标记。为什么会这样?
注意:提供的url只是一个例子。我尝试过多个不同的网站,但仍然没有定义。
感谢您的帮助!谢谢
不要使用page.evaluate
来获取元素,而是使用waitForSelector
/waitForXpath
/$x
/$$
(请参阅Puppeteer文档了解它们之间的区别:https://devdocs.io/puppeteer/index#pageselector-1( :
const links: ElementHandle[] = await mainPage.$$("p");
我刚刚用在这里找到的解决方案解决了一个问题,我无法找到并单击带有页面的锚标记。评估、waitForFunction或waitForSelector。解决方案是:
await page.focus('what-ever-the-selector-is')
await page.keyboard.type('n');
然后点击我进入下一页