Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在node.js控制台上打印Puppeter响应_Javascript_Node.js_Web Scraping_Puppeteer - Fatal编程技术网

Javascript 无法在node.js控制台上打印Puppeter响应

Javascript 无法在node.js控制台上打印Puppeter响应,javascript,node.js,web-scraping,puppeteer,Javascript,Node.js,Web Scraping,Puppeteer,我正在抓取一个网站进行练习,我正在使用木偶演员作为无头浏览器。我的问题是控制台在node.js控制台上记录木偶程序响应 我在DOM中为产品定位一个父元素,并从每个元素中检索某些信息。使用GoogleDev工具,我所有的QuerySelector都是正确的,我可以毫无问题地打印我想要的数据。但是,当尝试打印到node.js控制台时,我总是得到一个空白数组作为响应 const puppeteer = require('puppeteer'); let scrape = async () =&g

我正在抓取一个网站进行练习,我正在使用木偶演员作为无头浏览器。我的问题是控制台在node.js控制台上记录木偶程序响应

我在DOM中为产品定位一个父元素,并从每个元素中检索某些信息。使用GoogleDev工具,我所有的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 Dev Tools中看到的数据会出现在我的node.js控制台上。

问题是,您在
[]之后运行的所有东西。forEach.call(result,(el)=>{
都是在您的节点进程中运行的,而不是在Chromium中。因此,像
el.querySelector('.product thumb')
这样的东西不会工作,因为您“断开连接”从那个时候开始

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

const mainResult=wait page.evaluate(()=>{
常量主列表=[];
var result=document.querySelector(“.search results parent”).querySelector all(“.product preview”);
[]forEach.call(结果,(el)=>{
让缩略图=el.querySelector(“.product thumb”)
.querySelector('a')
.querySelector('img'))
.src;
让product_info=el.querySelector('.product info').querySelector('div');
让product_name=product_info.querySelector('a').querySelector('div').innerText;
让product_id=product_info.querySelector('.product id');
让product_color=product_id.querySelector('.product color').innerText;
让product_sku=product_id.querySelector('.product sku').innerText;
让产品价格=产品信息查询选择器(“.product price”)
.querySelector('span'))
.内部文本;
让整个={
缩略图,
产品名称,
产品颜色,
产品库存单位,
产品价格
};
主列表。推送(整个);
});
返回主列表;
});
browser.close();
返回主结果;

这就是解决方案:D