Javascript 如何通过木偶师进行网页抓取
如果我转到Javascript 如何通过木偶师进行网页抓取,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,如果我转到https://investor.vanguard.com/mutual-funds/profile/VMMXX并执行document.querySelector(“[data ng if='productSummaryTitle']”)。innerText从控制台中,我得到了我所期望的:产品摘要 但是,当我尝试对puppeter执行相同操作时,我得到了未处理的PromiserEjectionWarning:错误:计算失败:TypeError:无法读取属性'innerText'的nul
https://investor.vanguard.com/mutual-funds/profile/VMMXX
并执行document.querySelector(“[data ng if='productSummaryTitle']”)。innerText
从控制台中,我得到了我所期望的:产品摘要
但是,当我尝试对puppeter
执行相同操作时,我得到了未处理的PromiserEjectionWarning:错误:计算失败:TypeError:无法读取属性'innerText'的null,该属性位于\uuuuuu puppeter\u Evaluation\u script\uuuuu:3:83
。我错过了什么
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage()
await page.goto('https://investor.vanguard.com/mutual-funds/profile/VMMXX')
const result = await page.evaluate(() => {
let myText = document.querySelector("[data-ng-if='productSummaryTitle']").innerText
return {
myText
}
})
console.log(result)
browser.close()
})()
你可以先等那个选择器
const element=wait page.waitForSelector('[data ng if='productSummaryTitle']);
const text=await element.evaluate(el=>el.innerText);
感谢您提供答案。请编辑您的答案,包括对代码的解释,好吗?这将有助于未来的读者更好地理解正在发生的事情,尤其是那些对该语言不熟悉并努力理解这些概念的社区成员。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://investor.vanguard.com/mutual-funds/profile/VMMXX');
const element = await page.waitForSelector("[data-ng-if='productSummaryTitle']");
const text = await element.evaluate(el => el.innerText);
console.log(text);
await browser.close();
})();