【问题标题】:page.evaluate not returning response when scraping with Google Cloud Functions?使用 Google Cloud Functions 抓取时 page.evaluate 不返回响应?
【发布时间】:2021-07-22 12:13:31
【问题描述】:
  • Puppeteer 版本:9.0.0
  • 平台/操作系统版本:谷歌云功能
  • Node.js 版本:14
const puppeteer = require('puppeteer')

exports.MyFunc = function MyFunc(req, res) {

  MyFunc(req, res);
  async function MyFunc(req, res) {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await getSearchResults();
    
     async function getSearchResults() {

      const url = `https://abc.redacted.com/search?q=${query}&f=&orderBy=${sort_by}&skip=0&take=10`;
      console.log(url);
      await page.goto(url, { waitUntil: "domcontentloaded" });
      console.log("Page downloaded"); // It console logs till here

      const getResults =  await page.evaluate(() => {
      let items = [];
      const results = document.querySelectorAll(
        "#mainArea > router-view > ma-serp > div > div.results > div > compose > div > div.results > ma-card"
      );
      console.log(results);

      for (let result of results) {

        console.log(result.querySelector("span")?.innerText ?? "");

        items.push({ title: result.querySelector("span")?.innerText ?? "", })
      };
      return items;
      });

      const data = getResults;
      res.status(200).json(data);  // just getting {}

      await browser.close();
      }
  }
}

IDK 为什么page.evaluate() 没有控制台记录任何内容,也没有返回任何内容到节点环境。从三天开始,我在堆栈溢出和 GitHub 问题上尝试不同的解决方案,但直到现在都没有成功。

  • page.evaluate 返回时,我也尝试过promise.resolve(),但这也不起作用。

【问题讨论】:

  • 看起来你有一个 HTTP 函数,如果有,你需要确保它遵循Express notation。此外,您不能在函数内部创建函数,它们必须单独创建。修复此问题后,此功能可能会起作用。

标签: javascript node.js web-scraping google-cloud-functions puppeteer


【解决方案1】:

当您运行page.evaluate() 时,您实际上是在浏览器上下文中操作,而不是在 Node.js 中。所以console.log 输出到浏览器上下文,你不会在你的节点控制台中看到任何东西。

以下是一种将浏览器上下文输出到节点控制台的解决方法:

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

参考:Puppeteer log inside page.evaluate

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多