2017-11-15 2 views
0

Ich benutze casperjs mit Phantomjs auf PHP, um Webpage vor dem Extrahieren von Links, auf diese Weise in der Regel alle Links, die von Javascript erstellt werden kommen heraus und ich kann sie aber sehen nicht auf dieser Website: (.) ​​ centralcanadaclassics comPhantomjs/CasperJs nicht rendern Seite, so kann ich Links extrahieren

hier ist JS für CasperJS, die ich verwende:

var xpath = require('casper').selectXPath; 
var casper = require('casper').create({ 
    pageSettings: { 
    loadImages: false, 
    webSecurityEnabled: false 
    }, 
    verbose: true, 
    logLevel: 'debug', 
    colorizerType: 'Dummy' 
}); 

casper.userAgent('casper'); 
casper.start().then(function() { 
    this.open('http://www.centralcanadaclassics.com', { 
     headers: { 
      'Accept': 'text/html' 
     } 
    }); 
}); 
casper.then(function() { 
    this.echo('[CURRENT_URL]' + this.getCurrentUrl()); 
    this.echo('[CURRENT_TITLE]' + this.getTitle()); 
    this.echo('[CURRENT_PAGE_CONTENT]' + 
    this.getPageContent().replace(new RegExp('\r?\n','g'), '')); 
    this.echo('[CURRENT_HTML]' + this.getHTML().replace(new RegExp('\r? \n','g'), '')); 
    this.echo('[CURRENT_HEADERS]' + JSON.stringify(this.currentResponse.headers)); 
    this.echo('[CURRENT_STATUS]' + this.currentResponse.status); 
    this.echo('[CURRENT_STATUS_TEXT]' + this.currentResponse.statusText); 
    this.echo('[CURRENT_COOKIES]' + JSON.stringify(phantom.cookies)); 
}); 
casper.run(); 

So am Ende bleibt der gesamte Inhalt die gleiche, die Seite tut zu machen. Bitte erklären warum?

+0

Sie möchten also alle Links auf dieser Seite extrahieren? Und Sie wundern sich, warum Sie die Links in Casperjs Ausgabe nicht sehen können, aber Sie können es in normalen Browser sehen? –

Antwort

0

CasperJS ist asynchron. Du legst deine Daten beim Öffnen der Seite richtig ab, also werde ich hier ein wenig aushelfen und sagen, dass es genau das tut, was du sagst, eine Seite öffne und während es diese Seite rendert (was vorher bedeutet) es wird abgeschlossen) versuchen Sie, den Inhalt zu verwenden.

Wenn JS-Rendering (dynamisch) des Seiteninhalts ist, müssen Sie entweder eine hartcodierte Verzögerung (sehr spröde) implementieren oder ein allgemein gerendertes Element identifizieren und CapserJS sagen, dass es warten soll, bis es erkannt wird es, bevor Sie irgendeine Art von Link-Jagd machen.

Hier ist ein Beispiel dafür, was Sie mit Ihrem eigenen Link-Parsing-Look tun könnten, den ich 'getLinks()' nennen werde;

// open the page 
casper.thenOpen(url).then(function() { 
    if (this.exists('#some-id')) { 
     this.getLinks(); // this is your link hunting function 
    } 
}); 

Oder so etwas wie diese

casper.wait(1000, function() { 
    casper.then(function() { 
     this.getLinks(); // this is your link hunting function 
    }); 
}); 

Ich glaube, Sie versuchen, den Inhalt zu verwenden, bevor es gemacht wird.

Verwandte Themen