javascript - 如何通过 puppeteer 进行网页抓取
问题描述
如果我去控制台https://investor.vanguard.com/mutual-funds/profile/VMMXX
并document.querySelector("[data-ng-if='productSummaryTitle']").innerText
从控制台执行,我会得到我所期望的:Product summary
.
但是当我尝试对 做同样的事情时puppeteer
,我得到了UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null at __puppeteer_evaluation_script__: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 = await page.waitForSelector('[data-ng-if='productSummaryTitle']');
const text = await element.evaluate(el => el.innerText);
推荐阅读
- r - 第一个和最后一个传入帖子之间的情绪得分差异
- netflix-zuul - 如何使用 Micronaut + Zuul + Consult with Token Propagation?
- google-sheets-api - 添加一行 - 隐藏前一行时不向底部添加一行
- javascript - 从 .Net 中对 SOAP Web 方法的 Ajax 调用获取 500 服务器错误
- r - 如何在R中扩展每个观察的行数
- java - Java:如何找到数组的最小值(用户输入)
- ruby - rspec - 如何在 ruby 中测试 nil 输入
- python - 从数据框中的源中拆分条目 - 并将它们全部放在一个条目中
- css - 如何在 react-d3-tree 上定义单个链接样式
- python - Heroku 和 Django:如何使用文件服务器存储和编辑用户文件