0

Can someone help me understand why doesn't the product data get printed out? I'm currently using puppeteer to scrape a website for product data.

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
//link to page that i want to scrape
  await page.goto(
    "link link",
    { waitUntil: "networkidle2" }
  );

  var data = await page
    .evaluate(() => {
      var productData = {};
      productData["brand"] = document.querySelector(
        "a.designer-name > span"
      ).textContent;
      console.log("mimo");
      return productData;
    })
    .catch(err => {
      console.log(err);
    });
  console.log(data);

  await browser.close();
})();

1 Answers1

0

you are using promise and callback together. If you instead return a promise from the page.evaluate, it should work.

thanks to @tehhowch.

var data = await page
  .evaluate(async () => {
    return await new Promise(resolve => { // <-- return the data to node.js from browser
      var productData = {};
      productData["brand"] = document.querySelector(
        "a.designer-name > span"
      ).textContent;
      console.log("mimo");
      resolve(productData);
    });
  })
  .catch(err => {
    console.log(err);
  });
console.log(data);
Arun Kamalanathan
  • 8,107
  • 4
  • 23
  • 39