首页 > 解决方案 > 将 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;
 }
}

标签: node.jsdompuppeteerqueryselector

解决方案


如果我理解正确,问题可能是您尝试page.evaluate()在浏览器上下文中执行的参数函数内使用在 Node.js 上下文中声明的变量。在这种情况下,您需要将变量的值作为附加参数传输:

  let description = await page.evaluate((selector) => {
    return document.querySelector(selector).innerHTML;
  }, postDomValue);

在 中查看更多信息page.evaluate()


推荐阅读