Laden...

Zugriff auf Frames über Webbrowser Control

Erstellt von mosspower vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.817 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 16 Jahren
Zugriff auf Frames über Webbrowser Control

Hallo Kollegen,

ihr seit nun meine letzte Chance ... ich flippe gleich aus X( ... jetzt habe ich ewig lange recheriert und habe es doch tatsächlich hinbekommen, dass ich den Inhalt eines Frames anzeigen kann (mittels axWebbrowser). Das waren aber alles nur Tests auf einer Formsanwendung (soz. zum anlernen). Jetzt wollte ich das ganze in einer Consolenanwendung probieren. Hier habe ich es einfach nicht geschafft, dieses Active Control zu verwenden. OK, dachte ich, dann nehmen wir halt den "normalen" Webbrowser. Rufe ich hier "normale" Seiten auf (ohne Frames), funzzt alles wunderbar. Rufe ich eine Seite mit Frames auf, dann komme ich nicht an das HTML. Das kann doch nicht sein, dass dieses Teil mit Frames nicht "fertig wird". Leider habe ich im Inet auch schon ein paar Einträge gefunden (auch hier), es scheint wirklich so zu sein, dass man hier keinen Zugriff drauf hat.

Egal was ich mache, z.B.

HtmlWindow docWindow = browser.Document.Window;
HtmlDocument frameDocument = docWindow.Frames[0].Document;

... es funnzt einfach nicht ... obwohl es das eigentlich "sollte" .. der body ist einfach null 🙁

Zwei Fragen:

a) als Alternative würde ich ja gerne den axWebbroser verwenden, nur wie binde ich den ein in eine ganz normale Consolenanwendung? Ich bekomme immer Fehlermeldung "System.Windows.Forms.AxHost+InvalidActiveXStateException", mit der ich nix anfangen kann.

b) kennt denn "rein zufällig" einer die Lösung, ich würde bis nach Oberbayern schreien 😁 ... also, wo sind die Screenscraping-Champs?

Danke schon mal für etwaige Antworten

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 16 Jahren

OK, neuer Tag, neues Wissen,

nun bin ich beim "Original" Internet Explorer gelandet.

SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorerClass();
IWebBrowserApp wb = (IWebBrowserApp)ie;
wb.Visible = true; // warum dies, wer weiss das???

Jetzt habe ich das Problem, dass das Fenster (wb.Visible = true) angezeigt werden muss, um den richtigen Quellcode zu sehen.

Was ist der richtige Quellcode:
Die Seite wird geladen, dann erscheint der Text "Moment, alle Ereignisse werden geladen" ... dann wird mittels AJAX die Ereignisse angezeigt.

Lasse ich visible auf true, dann bekomme ich die Ereignisse (aufgelöst über AJAX) im Quellcode angezeigt, natürlich öffnet sich vorher ein Browserfenster, stelle ich visible auf false, dann bekomme ich im Quelltext die Anzeige ohne AJAX, also der Text ""Moment, alle Ereignisse werden geladen". Was muss ich jetzt noch tun, wenn ich KEIN! Fenster angezeigt bekommen möchte, aber natürlich mir das dynamische HTML angezeigt bekommen lassen will. Danke schon mal für etwaige Antworten.

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 16 Jahren

OK, für alle die es interessiert:

string url = "http://futbol24.com/f24_livenow/LiveNow.html";
Object o = null;
SHDocVw.InternetExplorer internetExplorer = new SHDocVw.InternetExplorerClass();
internetExplorer.Silent = true;
internetExplorer.Navigate(url, ref o, ref o, ref o, ref o);
bool ajax = false;

while(true) {
  if(internetExplorer.ReadyState != tagREADYSTATE.READYSTATE_LOADING && !ajax) {
    String html = ((IHTMLDocument2)internetExplorer.Document).body.innerHTML;
    ajax = html.IndexOf("style=\"DISPLAY: none\">Please wait !!!") != -1;

    if(ajax) {
      break;
    }
  }
  
  Thread.Sleep(50);
}

Gruß