2009-11-20 5 views
9

Ich habe ein neues Projekt, an dem ich arbeite, das beinhaltet das Abrufen einer Webseite (mit PHP und cURL) das Parsen des HTML und Javascript daraus und dann die Verarbeitung der Daten in den Ergebnissen.Nicht-Browser-Emulation von JavaScript - ist das möglich?

Grundsätzlich traf ich eine Mauer, wenn die Website Javascript verwendet, um seine Daten von AJAX zu holen. In diesem Fall werden die Anfangsdaten nicht auf der abgerufenen Seite angezeigt, es sei denn, das JavaScript wird in einem Browser ausgeführt.

Gibt es PHP-Bibliotheken dafür? (Ich vermute nicht, aber ich könnte falsch liegen.)

Ich würde wirklich lieber dies als eine serverbasierte Lösung bauen, sonst bin ich gezwungen, eine Anwendung dafür zu erstellen und Mozilla und/oder IE Laufzeitbibliotheken verwenden - Welche Art von Niederlagen den Zweck.

+0

Update für das Projekt: Mein Server ist eine LAMP-Maschine. Mein Testserver ist WAMP auf meinem Laptop, was ein Spiegelbild davon ist. Dies muss * SERVER BASED * sein, nicht browserbasiert. Das Ausführen von JAVA oder JavaScript im Browser ist keine Option. (jQuery scheint auch browserbasiert zu funktionieren.) Mit anderen Worten würde ein Cronjob die PHP-Datei aufrufen, die wiederum eine Webseite cURL würde. Die Webseite würde für HTML analysiert und jedes Javascript müsste in ein DOM-Modell interpretiert werden. Rhino sieht vielversprechend aus, aber JAVA ist nicht Teil der Shell, die auf dem Server erstellt wird. V8/SquirrelFish ist C++ - Code, den ich in PHP konvertieren müsste. –

+2

nicht auf Ihre Antwort kommentieren, nur bearbeiten – hasen

+0

Update x2: Es gibt eine Lösung mit .NET und IE in einer root-Shell. Ich persönlich werde das nicht mit einer zehn Fußstange berühren !!! Es macht mir Kopfschmerzen, mir all die wahnsinnigen Kopfschmerzen vorzustellen, die ich mit JavaScript für M $ und dem Rest der bekannten Welt gemacht habe, indem ich alles STANDARD benutze. Natürlich verwendet dies einen dedizierten Host. Natürlich ist das * NICHT * webbasiert. Und ja jetzt könnte man sich fragen, wie kann man dies mit IIS statt WAMP? >>>>>> <<< dies einen Schrei der cthulu verdient ############## #### --- ## - # - ### !!> –

Antwort

17

Sie benötigen:

  • ein JavaScript-Interpreter
  • ein DOM Level 2 Core-und HTML-Implementierung
  • 500 g Nicht-Standard, aber häufig verwendete DOM Erweiterungen
  • eine Prise DOM Level 2 Style (was auch einen CSS-Interpreter und Layout-Engine bedeuten könnte)
  • Joghurtbecher, runde Scheren und klebriger Kunststoff

Sobald Sie Ihre Komponenten zusammengestellt haben (denken Sie daran, einen Erwachsenen zu bekommen, um Ihnen mit dem Sandboxing zu helfen), werden Sie feststellen, was Sie haben, ist im Wesentlichen nicht von einem Webbrowser zu unterscheiden.

JAVA ist nicht Teil der Shell, die auf dem Server erstellt wird. V8/SquirrelFish ist C++ - Code, den ich in PHP konvertieren müsste.

Eine JS-Engine in PHP zu portieren wäre eine riesige Aufgabe, und die resultierende Leistung ist wahrscheinlich schrecklich. Sie können nicht einmal wirklich mit einer Fast-Lösung auf JavaScript davonkommen, da so viele Seiten schrecklich komplexe Bibliotheken wie jQuery verwenden, um alles zu tun, was eine tiefgreifende JS-Unterstützung erfordert.

Ich glaube nicht, dass Sie dies in PHP rein tun können. Sie müssen Java/Rhino/HTMLUnit oder einen geeigneten Webbrowser wie Mozilla verbinden. Wenn Ihre Hosting-Umgebung nicht die Flexibilität bietet, die Sie zum Kompilieren und Implementieren dieser Art von Sache benötigen, müssen Sie zu einem besseren Hosting-Setup mit einer Shell (vorzugsweise VPS) wechseln.

Wenn Sie diese Unannehmlichkeit auf eine andere Weise vermeiden können, tun Sie dies, indem Sie den AJAX-Zugriff auf bekannte Seiten verwenden.

+0

die Joghurtbecher, die runde Schere und der klebrige Kunststoff haben funktioniert! –

0

können Sie in rhino suchen. Es benutzt Java, hat noch nie von einem PHP-Port gehört.

Sind Sie verpflichtet, das eigentliche Javascript auszuführen?

3

Sie können eine JavaScript-Engine wie Rhino auf einem Server ausführen.

Hier ein paar Alternativen:

  • Rhino (Java basiert)
  • V8 (Wird von Chrome, C++)
  • SquirrelFish (C++)

Während diese JS ausführen können, Ich bin mir nicht sicher, ob das, was Sie tun, der beste Ansatz ist. Da Sie jedoch den Zweck Ihres Programms nicht spezifiziert haben, kann ich Ihnen diesbezüglich keine Vorschläge machen.

+0

Ich bin mir nicht sicher über die anderen, aber Rhino wird nicht in der Lage sein, das meiste clientseitige JavaScript eigenständig auszuführen, weil es das nicht implementiert DOM. –

0

Tbh Sie werden es schwerer haben, nur eine JS-Engine zu verwenden, da Sie auch die Umgebung einer Browser-Scripting-Engine wie die DOM- und Fensterobjekte erstellen müssen. Wenn Sie auf einem Windows-Server laufen, können Sie die IE-COM-Objekte relativ einfach verwenden, um die Webseite zu laden und auszuführen, programmgesteuert auf das DOM zuzugreifen und den Inhalt wieder herauszuziehen. Da Ihr Server Linux und/oder Mozilla ist, habe ich leider keine Erfahrung.

Aber wirklich, was versuchst du zu tun?

4

Sie müssen einen Schritt weiter gehen als Rhino, wenn Sie echte Live-Webseiten ausführen möchten, weil das JavaScript auf diesen Seiten erwarten wird, Objekte zu verwenden, die in einer Browserumgebung nativ sind. Eine serverseitige JavaScript-Engine wie Rhino verfügt nicht über diese Objekte.

John Resig (Schöpfer von jQuery) begann ein Projekt namens Env.js vor ein paar Jahren; Es könnte sein, was Sie suchen, aber ich vermute, dass Sie es schwer haben werden, konsistente Ergebnisse von einer Vielzahl von Webseiten zu erhalten. Hier ist seine erste Blog-Post über sie:

http://ejohn.org/blog/bringing-the-browser-to-the-server/

Einige ähnliche Projekte benannt sind in diesem Beitrag die Kommentare.

3

Zuvor hier gefragt: headless internet browser?

Bei Mozilla wir diese Frage viel zu bekommen. Es gibt keine gute Antwort.Was Sie wollen, ist eine Software-Bibliothek, die so ziemlich alles implementiert, was ein Browser benötigt (zumindest soweit es um Netzwerk, JavaScript, HTML-Parsing und das DOM geht), aber ohne Anzeige.

Das nächste, was ich kenne, ist HTMLUnit (in Java).

+0

das habe ich schon gemacht .. mit cURL aber ohne javascript-handhabung. –

1

Ich weiß, Sie haben kein Java gesagt, aber als Referenz könnten Sie Interesse an QT Jaambi haben. Sie haben eine Implementierung von Webkit, die Sie in headless mode ausführen können.

1

All diese Antworten scheinen zu der Annahme, dass es keine Möglichkeit, PHP-JavaScript-Emulation, aber es ist ein nahezu vollständig konforme Open-Source-PHP-JavaScript-Emulator hier:

http://www.sitepoint.com/blogs/2006/01/19/j4p5-javascript-for-php5/

In Kombination mit Env. js, Sie könnten einer vollständigen serverseitigen js-Ausführungslösung ziemlich nahe kommen.

+0

nicht schlecht, ich werde es überprüfen. –