2016-08-04 39 views
0

Ich versuche einen einfachen Code mit phantomJS, aber kein Glück.Nicht möglich, eine bestimmte Webseite von PhantomJS zu scratzen

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(); 
}); 

Die Seite ist oben in der Funktion, und auch hier Ich vertrete: Link to page

Ich erhalte Fehler und null Ausgabe nur.

Ich brauche die Produktbeschreibungen, aber es gibt keine Beschreibung aber Fehler.

kann ich die Seite hat sich durch Konsole Fehler, der

Uncaught Syntax sagt: unerwartetes Token <

Ist die Fehlerseite verursacht Problem oder irgendetwas anderes, bitte vorschlagen/Beratung.

+0

Bitte überprüfen Sie Ihr Skript mit einem Tool wie jslint, da scheint es Syntaxfehler zu geben. – Vaviloff

Antwort

1

Die standardmäßigen PhantomJS-Anfragen (ohne Header-Einstellungen) werden bei einigen Seiten als mobiles Gerät interpretiert. Wenn Sie in diesem Fall page.open aufrufen, wird die angeforderte URL an http://m.mightydeals.co.uk/index.html#dealList/productId=132212&menu1Id=1&menu2Id=0& umgeleitet, die kein Element #productInformation hat.

Sie können dieses Verhalten mit page.render('page.png') (wird ein Screenshot) innerhalb page.open Rückruf und vor page.evaluate überprüfen.

Eine schnelle Lösung dafür ist, einen benutzerdefinierten Header vor page.open festzulegen.

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' 
}; 

oder die Elemente in der mobilen Version der Seite verschrottet werden.

+0

Danke für die Antwort, ich habe die Lösung schon gefunden –