繁体   English   中英

无法在node.js控制台上打印操纵up的响应

[英]Cannot print puppeteer response on node.js console

我正在抓取一个网站进行练习,并且正在将Puppeteer用于无头浏览器。 我的问题是在node.js控制台上控制台记录操纵up的响应。

我的目标是产品中DOM中的父元素,并从每个元素中检索某些信息。 使用Google开发工具,我所有的querySelector都是正确的,我可以毫无问题地打印所需的数据。 但是,当尝试打印到我的node.js控制台时,我总是得到一个空白数组作为响应。

const puppeteer = require('puppeteer');



let scrape = async () => {

  const masterList = [];

  const browser = await puppeteer.launch({headless: true});
  const page = await browser.newPage();

  await page.goto('https://www.fschumacher.com/catalog/Wallcoverings?sid=0.07316907031133635');

  const result = await page.evaluate(() => {
    return document.querySelector('.search-results-parent').querySelectorAll('.product-preview');
  });


  [].forEach.call(result, (el) =>{
    let thumbnail = el.querySelector('.product-thumb')
                      .querySelector('a')
                      .querySelector('img')
                        .src;

    let product_info = el.querySelector('.product-info').querySelector('div');

    let product_name = product_info.querySelector('a').querySelector('div').innerText;

    let product_id = product_info.querySelector('.product-id');

    let product_color = product_id.querySelector('.product-color').innerText;
    let product_sku = product_id.querySelector('.product-sku').innerText;

    let product_price = product_info.querySelector('.product-price')
                                    .querySelector('span')
                                      .innerText;

    let whole = {
      thumbnail,
      product_name,
      product_color,
      product_sku,
      product_price
    };

    masterList.push(whole);

  });



  browser.close();

  return masterList;
};

scrape().then((res) => {
  console.log(res);
});

我希望在Goggle开发工具中看到的数据会出现在我的node.js控制台上。

问题是[].forEach.call(result, (el) =>{之后,您正在运行的所有内容都在您的Node进程中运行,而不是在Chromium中运行。因此,像el.querySelector('.product-thumb')将无法使用,因为此时您已与Chromium断开连接。

好消息是您可以通过将更多代码移至Chromium端来解决此问题:

const mainResult = await page.evaluate(() => {
    const masterList = [];
    var result = document.querySelector('.search-results-parent').querySelectorAll('.product-preview');

    [].forEach.call(result, (el) =>{
    let thumbnail = el.querySelector('.product-thumb')
                        .querySelector('a')
                        .querySelector('img')
                        .src;

    let product_info = el.querySelector('.product-info').querySelector('div');

    let product_name = product_info.querySelector('a').querySelector('div').innerText;

    let product_id = product_info.querySelector('.product-id');

    let product_color = product_id.querySelector('.product-color').innerText;
    let product_sku = product_id.querySelector('.product-sku').innerText;

    let product_price = product_info.querySelector('.product-price')
                                    .querySelector('span')
                                        .innerText;

    let whole = {
        thumbnail,
        product_name,
        product_color,
        product_sku,
        product_price
    };

    masterList.push(whole);

    });

    return masterList;
});
browser.close();  
return mainResult;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM