wake-up-neo.com

Erfasst Phantom.js alle AJAX-Dateien?

Ich habe eine Backbone-App, die eine Menge AJAX hat. (Jedes Laden einer Seite führt zu 5-6 Ajax-Aufrufen), da ich viele Ansichten und interne Ansichten in diesen Ansichten habe.

wenn ich Phantom.js starte, kann ich dann das endgültige HTML-Ergebnis erhalten? 

Das Endergebnis ist das, was der Benutzer sieht, nachdem alle Ajax-Aufrufe ausgeführt wurden.

25
TIMEX

PhamtonJs ist ein Headless-WebKit mit JavaScript-API. Beim Crawlen einer Seite lädt PhatomJs alle abhängigen Anforderungen herunter, z. B. images, js, css ... Außerdem werden JS- und Ajax-Aufrufe ausgeführt. Der onLoaded-Callback wird jedoch aufgerufen, wenn die Seite das Laden beendet hat, nicht wenn keine ausstehenden Anforderungen vorhanden sind. Du musst also einen Trick dafür verwenden.

Es gibt zwei Wege, um das Problem zu lösen:

  • Warten Sie, bis sich "etwas" auf Ihrer Seite (ein Element) geändert hat. Das beste Beispiel ist waitFor.js
  • Warten Sie einige Sekunden, bis keine Anforderungen eingegangen sind.
35
Cybermaxs

Phantom.js kann das Javascript in Ihrer Seite ausführen, daher sollte dies funktionieren. Es gibt einen Artikel , der beschreibt, wie man Crawlern schöne Versionen von Javascript-Websites mit Phantom.js gibt.

Stellen Sie sicher, dass Sie Phantom.js genügend Zeit geben, um die Ajax-Aufrufe abzuschließen, wie in diesem Thread beschrieben .

11
sbridges

Sie können $ .active zusammen mit dem Skript waitFor.js verwenden, das die aktive Verbindung zu einem Server zurückgibt. Wir müssen warten, bis es 0 ist, bis alle Anforderungen abgeschlossen sind.

Weitere Informationen: jQuery.active-Funktion

1
Naga Kiran

Wenn Sie Zugriff auf die Javascript-Codes der Website haben, können Sie, abgesehen von waitFor(), Ihre Ajax-Anfragen synchron machen. Es ist manchmal einfacher und genauer. 

0
iplus26