Java auf HTML-Seiten ausführen

So, nun wirds etwas haarig:

Ich möchte eine HTML-Seite herunterladen, diese aber NICHT im Browser anzeigen, sondern die Seite komplett Clientseitig verarbeiten und den dadurch entstandenen Quelltext mit einem Programm auslesen.

meine ganze Konstruktion steht schon soweit, dass ich Quelltexte laden und verarbeiten kann etc. Ich scheitere mit meinem Programm (allgemeine Suchmaschine) lediglich noch daran, dass ich Seiten, die hauptsächlich aus JavaApplicationen bestehen, nicht korrekt verarbeiten kann.

Da ich Threads benutze, fällt der IE flach.

Gibt es eine Möglichkeit (Am besten eine Threadsichere Bibliothek) mit der ich die Javascripte ausführen und dann an den durch Java geänderten Quellcode kommen kann?

Vielen Dank im voraus…

Grüße,

Alexander

Da ich Threads benutze, fällt der IE flach.

Warum? Echte Neugier.

Gibt es eine Möglichkeit (Am besten eine Threadsichere
Bibliothek) mit der ich die Javascripte ausführen und dann an
den durch Java geänderten Quellcode kommen kann?

Wie jetzt, entscheid dich! Weiter oben sprichst du von Java-Applikationen? Ich denke mal, du meinst in Wirklichkeit nur Javascript.

Perl bringt sehr schöne Möglichkeiten mit. Ich habe mal Perl-Skripte geschrieben, die Folgen von Websiten abgelaufen sind und dabei auch jeweils bei Bedarf das Javascript evaluiert haben. „perl lwp“ wäre der Google-Einstieg.

Also wenn es nicht unbedingt Dotnet sein muss, wirst du damit sehr glücklich.

Viele Grüße,
Sebastian

Muss schon dotnet sein…

Und du hast recht, ich meinte hauptsächlich JavaScript, die Unterscheidung habe ich leider nicht gemacht.

Naja, wie gesagt können JavaScripte clientseitig den Quelltext verändern und noch andere dinge tun.

Wenn es denn so etwas für .net gibt, wäre ich froh, wenn ich JavaScript alle Freiheiten geben kann, die es von einem aktuellen Webbrowser gewohnt ist. Aber die Ergebnisse sollen schlicht NICHT auf dem Bildschirm GERENDERT werden; die Rechenleistung wollte ich mir sparen.

Und der IE fällt flach, weil er nicht Threadsicher ist. ich arbeite mit Threads (je nach Einstellung so etwa 10 bis 100), die eine Webseite herunterladen und diese dann nach Links durchsuchen. Die Links, die erst nachträglich durch JavaScript eingefügt oder zusammengebaut werden, kann ich auf diese Weise natürlich nicht erwischen.

Rufe ich nun aus einem Hintergrundprozess das Pendant zum IE (System.Windows.Forms.WebBrowser) auf, so erhalte ich die Meldung, dass man diesen nciht aus Threads heraus öffnen kann. Hier hätte ich zumal das Problem, dass dieser im Zweifel die Webseite rendert und anzeigt.

Erst einmal danke für deine Antwort, ich hoffe, du kannst mir noch ein wenig weiterhelfen :smile:

Grüße,

Alexander

Hallo!
Ich hab’s gerade ausprobiert - Du kannst sehr wohl mit mehreren Threads arbeiten und dabei den WebBrowser nutzen.
Dabei sind allerdings 2 Punkte zu beachten:

  1. Für die neuen Threads, in denen Du den WebBrowser instanzieren willst, musst Du den ApartmentState auf STA setzen
  2. Events bekam ich erst dann, als ich in der jeweiligen Treadprozedur Application.DoEvents() aufgerufen habe.

Aber unter diesen Randbedingungen konnte ich in einem Beispielprogramm in 10 Threads auf eine Webseite navigieren und die Länge ihres Quelltextes bestimmen…

Gruß,
Martin

P.S.: „Threadsicher“ hat mit dem Apartmentstate nicht unbedingt etwas zu tun. Threadsicher heisst ja, dass die betreffende Methode (des selben Objekts!) aus mehreren Threads aufgerufen werden kann, aber das brauchst Du nicht, wenn mehrere Webbrowser jeweils in ihrem eigenen Thread laufen.

Danke
oha, werde ich sofort einmal testen.

Vielen Dank!

Alexander