node.js - 将 post 变量与 querySelector 一起使用
问题描述
我在尝试使用 puppeteer 和 querySelector 在网络上抓取数据时遇到问题。
我有一个处理后查询的nodeJS WebServer,然后调用一个函数来抓取数据。我正在发送 2 个参数(postBlogUrl 和 postDomValue)。
PostDomValue 将包含我试图从中获取数据的选择器作为字符串,例如:[itemprop='articleBody']。
如果我手动建议选择器 ([itemprop='articleBody']),一切正常,我可以检索数据,但如果我使用 postDomValue var,则不会返回任何内容。
我已经尝试使用 CSS.escape(postDomValue) 转义 var,但没有运气。
fetchBlogContent: async function(postBlogUrl, postDomValue) {
try {
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
page = await browser.newPage();
await page.goto(postBlogUrl, {
waitUntil: 'load'
})
let description = await page.evaluate(() => {
//This works return document.querySelector("[itemprop='articleBody']").innerHTML;
//This won't return document.querySelector(postDomValue).innerHTML;
})
return description
} catch (err) {
// handle err
return err;
}
}
解决方案
如果我理解正确,问题可能是您尝试page.evaluate()
在浏览器上下文中执行的参数函数内使用在 Node.js 上下文中声明的变量。在这种情况下,您需要将变量的值作为附加参数传输:
let description = await page.evaluate((selector) => {
return document.querySelector(selector).innerHTML;
}, postDomValue);
在 中查看更多信息page.evaluate()
。
推荐阅读
- css - 通过css更改显示顺序
- java - 如何正确使用 getDayOfWeek 方法
- hyperledger-fabric - 运行“go build”命令时出现错误“调用 s.statsd.SendLoop 时参数不足”
- angular - 打字稿等到条件推送数组中的元素
- json - 如何创建一个 Flutter Futurebuilder 函数来显示从 JSON 中获取的字符串数组?
- php - 从数组php获取多列,array_column的替代
- javascript - 如何让我的代码由`setInterval`运行而不向用户发送垃圾邮件
- javascript - 启用滚动功能后,透明导航栏不会变得透明
- python - 从 Python 执行 MS Access 宏时出错
- c# - 如果一动不动,Hololens 就会睡着