将 post 变量与 querySelector 一起使用

Use post variable with querySelector

我在尝试使用 puppeteer 和 querySelector 在网络上抓取数据时遇到问题。

我有一个处理 post 查询的 nodeJS WebServer,然后调用一个函数来抓取数据。我发送了 2 个参数(postBlogUrl 和 postDomValue)。

PostDomValue 将包含我试图从中获取数据的选择器作为字符串,例如: [itemprop='articleBody'].

如果我手动建议选择器 ([itemprop='articleBody']),一切正常,我能够检索数据,但如果我使用 postDomValue 变量,则没有返回。

我已经尝试使用 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()


const description = await page.evaluate((value) => 
    document.querySelector(value).innerHTML, JSON.stringify(postDomValue));

请参阅 puppeteer

中有关如何将参数传递给 page.evaluate() 的文档