WebBrowser Control "Document" zeilenweise auslesen



  • hmm .. hast du ne Lösung für dein Prob gefunden?
    Wenn ja, dann lass uns mal bitte dran teilhaben 😉
    *auchDAsProblemHab*

    Grüße, Desorganizer.



  • Hat sich erledigt 😉
    *selbstgeschafft*



  • Verwende das Ding recht viel, ist code gehört leider der company, kann ich nicht so einfach posten.

    Grober ablauf:

    a) Wenn du das Dokument durch Navigate() ausgewählt hast, mußt du auf jeden fall erstmal das DocumentComplete() - Event abwarten (währenddessen muß eine Message Queue laufen)

    b) GetDocument-IDispatch ==> QueryInterface for IHTMLDocument2

    c) IHTMLDocument2->get_body(&pElemBody) ==> IHTMLElement

    d) IHTMLElement hat: get_innerText, get_outerText, get_innerHTML, get_outerHTML, die einen BSTR zurückliefern

    Die Interfaces machst du am besten mittels #import "shdocvw.dll" rename_namespace(nsEinNamespaceDerDirGenehmIst) bekannt

    Wenn du das Zeug außerhalb des body's brauchst, muß ich nochmal nachschaun...



  • Jep!
    Hatte es bereits genauso, wie du es geschrieben hast 😉

    CString strSource;
    IHTMLElement *iSource;
    CComBSTR btsrSource;
    
    IHTMLDocument2 *document = (IHTMLDocument2 *)m_Browser.GetDocument();
    document->get_body(&iSource);
    iSource->get_innerText(&btsrSource);
    strSource=btsrSource.m_str;
    

    Danke trotzdem!

    Grüße, Desorganizer.



  • Aber ne Frage habsch trotzdem noch ... @Peterchen

    Weißt du vielleicht, wie man durch Navigate zwar eine komplette Seite läd, aber nur ein bestimmtes Frame anzeigt? 😉

    Grüße, Desorganizer.



  • Hab deine Frage schon gesehen gehabt 😉

    IHTMLWindow2 hat 'ne Frames-Collection, dort könntest du dir den URL holen. funktioniert aber nicht, wenn die frameseite einen redirect macht.

    Wenn die header-Info nicht wichtig ist kannst du dir auch den Body holen und in ein leeres Dokument setzen.

    Oder du holst dir den ganzen <html> - block und versuchst das meta refresh rauszufiltern.

    Die größe aller anderen Frames auf 0 setzen? (könnte gehen) Bzw eine "fake-Seite" erstellen, die die richtigen Frames und frame-namen hat, wo aber alle anderen Frames die größe 0 haben.

    Ist aber alles nicht 100% wasserdicht, würd ich kommerziell nicht verwenden



  • Auf die IHTMLFramesCollection2 bin ich auch bereits gestoßen! Kann zwar nachvollziehen was das Teil macht, nur habe ich das vorher nie angewendet und scheitere somit.

    Das Problem bei mir ist, dass sich bei mir im Browser ein Frameset öffnet (ohne redirect) ich aber, ohne das spezielle Frame neu zu laden, dieses öffnen muss.
    Man könnte natürlich mit den XY Koordinaten ein bisschen rumspielen, um zu versuchen das gewünschte Frame in den Browser zu packen, aber ist ja nicht gerade die eleganteste Methode 😉

    Grüße, Desorganizer.
    PS: Wie meinst du das eigentlich mit der Fake-Seite?!



  • Fake-Seite: Wäre Eine Möglichkeit, wenn die Zielseite per JavaScript abtestet, das bestimte Frames vorhanden sind. Du erstellst eine temporäre Seite (temp file, oder über IHTMLDoc3), die die entsprechenden Frames mit den richtigen Namen enthält, aber mit größe 0 (sozusage das, was die meisten Redirect-Services verwenden). Nur die eigentliche Seite machst du halt auf 100%.

    Müßtest aber auch neu laden.

    Ohne neu zu laden wird schwierig... 😕



  • Yoa, das ist ja die ganze ****** mit dem Neu-Laden ...
    Kann zwar das bestimmte Frame in Echtzeit jetzt immer wieder neu auslesen (als Nachricht die OnStatusTextChanceExplorer) aber brauche zum kompletten Funktionieren des Frames eben auch die anderen Frames *grmp*
    Kann man vielleicht über put_innerText die notwendigen Zusatzbefehle manuell in das Frame unterschmuggeln?!
    Müsste man aber vorher den alten innerHTML komplett auslesen, auswerten und wieder zurückschreiben, womit die clientPush-Methode des Frames goodbye sagt 😞

    Gibt es vielleicht ne Möglichkeit den Zusatzcode einfach in ne bestimmte Zeile einzufügen ohne unbedingt das document komplett neu zu laden?

    Grüße, Desorganizer.



  • geht, - aber erst nach dem Laden....


Anmelden zum Antworten