我正面临着一个问题,试图用木偶师和querySelector在网络上抓取数据。
我有一个处理post查询的nodeJS WebServer,然后调用一个函数来抓取数据。我发送了两个参数(postBlogUrl和postDomValue)。
PostDomValue将包含我试图从中获取数据的选择器作为字符串,例如: itemprop='articleBody‘。
如果我手动建议选择器(itemprop=‘postDomValue but’),一切都正常,我能够检索数据,但如果我使用itemprop变量,则不会返回任何内容。
我已经尝试使用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;
}
}发布于 2021-03-18 04:08:25
const description = await page.evaluate((value) =>
document.querySelector(value).innerHTML, JSON.stringify(postDomValue));有关如何在puppeteer中将参数传递给page.evaluate()的文档,请参阅文档
发布于 2021-03-18 03:45:47
如果我理解正确的话,问题可能是您试图在浏览器上下文中执行的page.evaluate()的参数函数中使用在Node.js上下文中声明的变量。在这种情况下,您需要将变量的值作为附加参数进行传递:
let description = await page.evaluate((selector) => {
return document.querySelector(selector).innerHTML;
}, postDomValue);在page.evaluate()中可以看到更多。
https://stackoverflow.com/questions/66678742
复制相似问题