2016-08-04 86 views
0

我正在尝试使用phantomJS的简单代码,但没有运气。无法刮取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(); 
}); 

页以上的功能,也是在这里我代表:只有 Link to page

我得到的错误和无效的输出。

我需要获取产品说明,但它没有给出任何描述,只是错误。

我可以看到页面具有通过控制台,上面写着

未捕获的SyntaxError错误本身:意外令牌<

是造成问题或其他任何东西,请建议/咨询页面错误。

+0

请用像jslint这样的工具检查你的脚本,看起来有语法错误。 – Vaviloff

回答

1

默认的PhantomJS请求(没有标头设置)被解释为某些页面的移动设备。在这种情况下,当您拨打page.open时,请求的网址将重定向到http://m.mightydeals.co.uk/index.html#dealList/productId=132212&menu1Id=1&menu2Id=0&,该网址没有任何#productInformation元素。

您可以在page.open回调内和page.evaluate之前检查此行为与page.render('page.png')(将截图)。

快速修复此问题是在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' 
}; 

或获取要在移动版页面中报废的元素。

+0

感谢您的回答,我之前找到了解决方案 –