我正在尝试使用phantomJS的简单代码,但没有运气。
var page = new WebPage();
var system = require('system');
var site=system.args[1];
var page = require('webpage').create();
page.onError = function (msg, trace)
{
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
page.open("https://www.mightydeals.co.uk/Products/all/National/Grey-
Small/132212", function(){
var p=page.evaluate(function(){
return [].map.call(document.querySelectorAll('#productInformation'),
function(link) {
return link.innerText;
});
});
console.log(p);
});
phantom.exit();
});
页面在函数的上方,我在这里代表: Programmatic Access To Visual Basic Project Is Not Trusted - Excel
我只收到错误和空输出。
我需要获得产品说明,但不提供任何描述,只有错误。
我可以通过控制台看到该页面有错误
未捕获的SyntaxError:意外的标记<
页面错误导致问题或其他任何问题,请建议/建议。
答案 0 :(得分:1)
默认的PhantomJS请求(没有标头设置)被解释为某些页面的移动设备。在这种情况下,当您致电page.open
时,请求的网址会重定向到http://m.mightydeals.co.uk/index.html#dealList/productId=132212&menu1Id=1&menu2Id=0&
,其中没有任何#productInformation
元素。
您可以在page.render('page.png')
回调中和page.open
之前使用page.evaluate
(将截取屏幕截图)检查此行为。
快速解决此问题的方法是在page.open
之前设置自定义标头。
page.customHeaders = {
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept': '*/*',
'Accept-Language': 'nb-NO,nb;q=0.9,no-NO;q=0.8,no;q=0.6,nn-NO;q=0.5,nn;q=0.4,en-US;q=0.3,en;q=0.1',
'Connection': 'keep-alive'
};
或在移动版页面中删除要删除的元素。