我正在使用脚本来每天获取网站的屏幕截图。我已经在其他站点上做到了,它可以正常工作,但是第一次出现下一个问题……我的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; 我看到了第一个产品的价格,依此类推,等等……:
我也可以使用这样的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”执行价格吗?