2013-01-31 5 views
6

Ich hole Seiten mit cURL in PHP. Alles funktioniert gut, aber ich hole einige Teile der Seite, die mit JavaScript berechnet werden, einen Bruch, nachdem die Seite geladen ist. cURL sendet die Quelle der Seite bereits zurück an mein PHP-Skript, bevor die JavaScript-Berechnungen ausgeführt werden, was zu falschen Endergebnissen führt. Die Berechnungen auf der Website werden von AJAX abgerufen, daher kann ich diese Berechnung nicht auf einfache Weise reproduzieren. Außerdem habe ich keinen Zugriff auf den Code der Zielseite, daher kann ich diese Zielseite nicht so anpassen, dass sie zu meinen (cURL) Abrufanforderungen passt.Gibt es eine Möglichkeit, cURL warten zu lassen, bis die dynamischen Aktualisierungen der Seite abgeschlossen sind?

Gibt es eine Möglichkeit, cURL zu warten, bis der gesamte dynamische Verkehr beendet ist? Es könnte schwierig sein, da einige JavaScripts Daten an eine andere Domäne zurücksenden, was zu langen Verzögerungen führen kann. Aber zumindest kann ich dann testen, ob ich zumindest die richtigen Ergebnisse zurückbekomme.

Meine Entwickler-Symbolleiste in Safari zeigt an, dass die Seite in etwa 1.57s fertig ist. Vielleicht kann ich cURL statisch sagen, dass ich auch 2 Sekunden warten soll?

Ich frage mich, was die Möglichkeiten sind :)

Antwort

4

cURL keine JavaScript ausführen oder alle Dateien im Dokument referenziert herunterladen. Also cURL ist nicht die Lösung für Ihr Problem.

Sie müssen einen Browser auf der Serverseite verwenden, sagen Sie ihm, dass er die Seite laden soll, warten Sie X Sekunden und fragen Sie dann nach dem HTML-Code.

Betrachten Sie: http://phantomjs.org/ (Sie müssen node.js verwenden, ich kenne keine PHP-Lösungen).

+0

Zum Glück ist es nur ein kleines Stück Code. Ich werde den Code in JavaScript umschreiben und die Daten dann mit jQuery und PhantomJS holen. Danke :) –

+0

Gibt es eine Möglichkeit, PhantomJS nur einfach in meine lokale HTML-Seite, wo ich meine jQuery tun? –

+0

Nein. Phantom.js verwendet intern einen echten Webkit-Browser, den Sie auf dem Client nicht ausführen können. –

2

Sie wissen nicht viel über die Seite, die Sie abrufen oder die Berechnungen, die Sie einschließen möchten, aber es könnte eine Option sein, direkt auf die URL zu verweisen, die diese Ajax-Anfragen bedient. Verwenden Sie etwas wie Firebug, um die Ajax-Aufrufe auf Ihrer Zielseite zu überprüfen, und Sie können die URL und alle übergebenen Parameter herausfinden. Wenn Sie die vollständige Webseite benötigen, können Sie vielleicht sowohl die Webseite als auch die Ajax URL cURL und kombinieren Sie die beiden in Ihrem PHP-Code, aber dann beginnt es unordentlich zu werden.

+0

Dies ist der Weg zu gehen, anstatt ein anderes Programm zu verwenden. –

Verwandte Themen