Laden...

Alle angezeigten Texte im WebBrowser-Control auslesen

Erstellt von Patboy vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.978 Views
P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren
Alle angezeigten Texte im WebBrowser-Control auslesen

Hallo Liebe C# Programmierer...

bin schon seit längeren auf der Suche für eine Lösung meines Problems...

Ich habe mit MVS2008 ein C# projekt erstellt. Und zwar habe ich vor auf einer Internet
Seite automatisch alle texte abzuspeichern und zu bearbeiten.

Also habe ich einen einfach WebBrowser in die Form1 gezogen und habe dort die Seite aufgerufen.

Dann surfe ich zur Richtigen Seite und dann will ich mit Klick auf einen Button alle Texte auf der Seite auslesen und abspeichern...
Nur das Problem ist das dieser Text nicht im Quellcode ist, somit habe ich keine Ahnung wie ich das anstellen kann...

Im Quellcode sind z.b. funktionen aber kein wirklicher text, aber auf der seite selbst sieht man aber trotzdem texte, wie zum Beispiel
Benutzernamen (siehe Anhang). Nun würde ich zum beispiel diese namen abpeichern in ein string array.

Würde mich gerne um eine kleine hilfe freuen,

Mfg Patrick alias Patboy

H
89 Beiträge seit 2008
vor 13 Jahren

ist es vielleicht Flash?
schonmal mit Firebug unter die Lupe genommen?

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

naja glaube eher nicht das es flash ist, da ich es ja sonst mit dem c# webbrowser ja nicht öffnen könnte oder??

und firebug hat auch kein ergebnis gebracht, nichts zu finden.

Aber ich denke mir die ganze zeit, ich sehe den text ja, der muss ja irgendwo gespeichert sein, und von da müsste ich ihn ja herauslesen können, doer irre ich da?

B
293 Beiträge seit 2008
vor 13 Jahren

Wenn es kein Flash ist und angezeigt wird. Dann, behaupte ich, ist es auch möglich an die Texte zu kommen. Würdest du mal den Link zur Seite posten? Dann werde ich gerne mal einen Blick drauf. 😉

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

also um genau zu sein, ist es ein browser online game... daher kann ich dir da schlecht einen link posten,
aber falls es dich brennend interessiert wie das ausschaut hast du 2. möglichkeiten:

  1. du meldest dich dort auch an (earthlost.de), was du wahrscheinlich nicht tun möchstest (glaube ich halt)

oder 2. du schaust dir den quellcode an, ich habe ihn als anhang beigefügt.
der quellcode stammt aus der site, die du im ersten bild sehen kannst. also eine ansicht von universum...
aber im quellcode nur funktionen, aber keine namen, wie sie angezeigt werden.

desweiteren bin ich drauf gekommen, wenn ich mit

wb_Earthlost.ShowSaveAsDialog();

die site auf den desktop speicher, und dier erhaltene .mht datei mit dem normalen texteditor öffne, kann ich die namen rauslesen... nur dieser weg ist mir zu umständlich...

es muss ja irgendwie einfacher gehen...

B
293 Beiträge seit 2008
vor 13 Jahren

Ok - so wie das ausschaut, werden die Texte per Javascript nachgeladen. Aber wenn es dir im Webbrowser Element richtig angeziegt wird, dann kannst du auch den gerenderten Quellcode auslesen.
Wie und wann genau holst du denn den Quelltext?

wb_Earthlost.DocumentText oder wb_Earthlost.Document.Body.InnerHtml oder wb_Earthlost.Document.Body.InnerText oder wie greifst du darauf zu?

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

also ich navigier per hand zur der seite wie man in bild sieht.
dann warte ich bis seite fertig geladen ist, dann habe ich einen button mit dem ich
den quellcode auslesen:

        private void btn_Start_Click(object sender, EventArgs e)
        {
            GanzeURL = wb_Earthlost.Url.AbsoluteUri;
            SplitURL = GanzeURL.Split('?');
            sidURL = SplitURL[1];
            MainURL = SplitURL[0];
            Split2URL = MainURL.Split('/');
            EngineURL = Split2URL[0] + '/' + '/' + Split2URL[2] + '/';
            WeiterURL = EngineURL + "galaxy.phtml?" + sidURL;
            // universe=" + universe + "&galaxy=" + galaxy + "&system=" + system + "&" 
            //wb_Earthlost.ShowSaveAsDialog();
            quelle = wb_Earthlost.DocumentText;
            File.WriteAllText(@"D:\main.txt",quelle);
        }

aber wie gesagt, da sind keine namen drin, wie man in der txt datei von vorhin sieht
das mache ich in den letzten beiden befehlen

B
293 Beiträge seit 2008
vor 13 Jahren

Ok, wenn ich das richtig sehe, dann sind deine Namen, etc. in nem Iframe. Um an den Quelltext im Iframe zu kommen musst du alle HTMLElemente in deinem WebbrowserControl durchegen und nach dem passenden Iframe-Element suchen. (Zum Beispiel Abgleich über das "name"-Attribut).
Wenn du das Element gefunden hast, dann kannst du über die Eigenschaft Element.Body.InnerHTML deine "Namen" auslesen.

viele Grüße

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

danke erstmal für deine schnelle hilfe um diese uhrzeit.

habe versucht deinen vorschalg in die tat umzusetzen, hat aber irgendwie nicht ganz
geklappt. habe folgenden code geschrieben:

        private void btn_Start_Click(object sender, EventArgs e)
        {
            GanzeURL = wb_Earthlost.Url.AbsoluteUri;
            SplitURL = GanzeURL.Split('?');
            sidURL = SplitURL[1];
            MainURL = SplitURL[0];
            Split2URL = MainURL.Split('/');
            EngineURL = Split2URL[0] + '/' + '/' + Split2URL[2] + '/';
            WeiterURL = EngineURL + "galaxy.phtml?" + sidURL;
            // universe=" + universe + "&galaxy=" + galaxy + "&system=" + system + "&" 
            //wb_Earthlost.ShowSaveAsDialog();
            quelle = wb_Earthlost.DocumentText;

            int iframe = wb_Earthlost.Document.Window.Frames.Count;

            for (int i=0; i < iframe; i++)
            {
                HtmlWindow frame = wb_Earthlost.Document.Window.Frames[i];
                string frameHtml = frame.Document.Body.InnerHtml + frame.Document.Body.InnerText + 
                                    frame.Document.Body.OuterHtml + frame.Document.Body.OuterText;
                File.WriteAllText(@"D:\main" + i + ".txt", frameHtml);
            }

es sind nur 2 frames die er zählt.

da kommt dann aber immer noch nicht der gesuchte text vor. Im anhang siehst du wieder die txt die mir ausgespcukt wurde. habe die ergebnisse von main0 und main1 zusammen gefügt.

werde jetzt dann auch mal schalfen gehen, melde mich spätestens morgen nachmittag wieder.

mfg Patrick

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Dein zuletzt gepostetes Dokument ist ja wieder ein Frameset.
Um an Deinen Text zu kommen, musst Du also noch weiter in die Framestruktur runterklettern. Ich vermute den gesuchten Text in der ally.phtml

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

Danke für die info. Aber wie kann ich noch weiter in der framestruktur runterklettern?? Kenn mich auf dem gebiet webbrowser nicht so gut aus, und im c# codebook ist auch nichts brauchbares dabei.

mfg Patrick

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

das machst Du genauso wie mit dem IFRAME.

frame.Document hat auch wieder ein Window, und dieses hat (im Falle eines Framesets oder vorhandener Iframes) wieder eine Frames-Collection, usw...

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

H
89 Beiträge seit 2008
vor 13 Jahren

such mal nach Watin, das könnte dir es vielleicht etwas erleichtern

P
Patboy Themenstarter:in
7 Beiträge seit 2010
vor 13 Jahren

Vielen Dank MarsStein habe nun endlich einen string, mit dem ich was anfangen kann

hier der code:

                HtmlWindow frame = wb_Earthlost.Document.Window.Frames[1];
                frame = frame.Document.Window.Frames[1];
                string frameHtml = frame.Document.Body.OuterText + frame.Document.Body.OuterHtml;
                File.WriteAllText(@"D:\main.txt", frameHtml);

jetzt gehts dann mal weiter mit der programmierung...

Vielen Dank nochmal.

Mfg Patrick