PhantomJS屏幕截图中的数据丢失

时间:2018-07-12 21:49:02

标签: javascript dom web-scraping phantomjs screen-scraping

我正在使用脚本来每天获取网站的屏幕截图。我已经在其他站点上做到了,它可以正常工作,但是第一次出现下一个问题……我的phantomjs脚本捕获了网站中的几乎所有数据,但不是全部(实际上,它并不打印最重要的数据)就我而言)。

直到现在,我一直在使用经过改编的简单脚本:

var page = require('webpage').create();
page.open('http://www.website.com', function() {
    setTimeout(function() {
        page.render('render.png');
        phantom.exit();
    }, 200);
});

但是当我为this site运行相同的脚本时,它将丢失一些数据。截取屏幕截图,但是错过价格...

Screenshot of the site with phantomjs

经过一番探索,我发现如果进行DOM捕获(例如使用PHP Simple HTML DOM parser),我可以获取大部分数据,但不能获取价格。

$html = file_get_html('https://www.falabella.com.ar/falabella-ar/category/cat10178/TV-LED-y-Smart-TV');
$prods = $html->find('div[class=fb-pod-group__item]');
  foreach ($prods as $prod) {
    // For example i can get the title 
    $title = $prod->find('h4[class=fb-responsive-hdng-5 fb-pod__product-title]',0)->plaintext;

    // But not the price
    $price = $prod->find('h4[class=fb-price]',0)->plaintext;
  }

浏览控制台日志,我发现这些值所在的javascript对象。如果我返回对象fbra_browseProductListConfig.state.searchItemList.resultList [0] .prices [0] .originalPrice; 我看到了第一个产品的价格,依此类推,等等……:

Console log of the site

我也可以使用这样的phantomjs脚本来获取它:

var page = require("webpage").create();
page.open("https://www.falabella.com.ar/falabella-ar/category/cat10122/Cafeteras-express", function(status) {
        var price = page.evaluate(function() {
        return fbra_browseProductListConfig.state.searchItemList.resultList[0].prices[0].originalPrice;
        });
        console.log("The price is " + price);
		phantom.exit();

});

在其他帖子(like this)中,我读到了有关更改超时间隔的信息,但不适用于我(我尝试了引用的帖子中共享的所有脚本)。问题不在于网站没有完全收费。但是似乎该数据(价格)没有打印在DOM中。我什至用wget命令从终端下载了整个站点,价格不在o_O。

已编辑

执行脚本时出现下一个错误:

./phantomjs fala.js 
ReferenceError: Can't find variable: Set
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:22
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:1 in t
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:22
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:1 in t
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:22
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:1 in t
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:1
TypeError: undefined is not an object (evaluating 't.componentDomId')

  https://www.falabella.com.ar/static/assets/scripts/react/productListApp.js?vid=111111111:3
  https://www.falabella.com.ar/static/assets/scripts/react/vendor.js?vid=111111111:22

问题可能是因为脚本“ productListApp.js”执行价格吗?

0 个答案:

没有答案