Discussion:
Browserfernsteuerung bzw. HTML Inhalte steuern
(zu alt für eine Antwort)
Matthias Heise
2005-05-08 18:51:18 UTC
Permalink
Guten Abend,

ich möchte in meinem Projekt (C#) einen Browser (IE oder Firefox oder was
auch immer) mitteilen, welche URL aufgerufen werden soll. Sobald das
Dokument geladen ist, möchte ich jedoch weiterhin Zugriff auf den Inhalt
haben. Also den DOM auslesen und eventuell Textboxen etc. ferngesteuert
füllen können.

Kann mir jemand vielleicht einen Rat geben mit welchem Browser sowas am
besten geht und ob über .NET oder COM. Oder gibt es in der .NET
Klassenbibliothek was brauchbares dazu?

Alles im System.Web Namespace zielt irgendwie auf die Erstellung von
Websites bzw. auf die Server-Seite.

Danke für jeden Hinweis.

Matthias
Frank Dzaebel
2005-05-08 19:04:25 UTC
Permalink
Hallo Matthias,
Post by Matthias Heise
ich möchte in meinem Projekt (C#) einen Browser (IE oder Firefox oder was
auch immer) mitteilen, welche URL aufgerufen werden soll. Sobald das
Dokument geladen ist, möchte ich jedoch weiterhin Zugriff auf den Inhalt
haben. Also den DOM auslesen und eventuell Textboxen etc. ferngesteuert
füllen können.
Kann mir jemand vielleicht einen Rat geben mit welchem Browser sowas am
besten geht und ob über .NET oder COM. Oder gibt es in der .NET
Klassenbibliothek was brauchbares dazu?
Ich nehme mal trotzdem an, Du meinst : als WinForm-Application.
Das kann sehr einfach über Webbrowser-Control neben dem IE-DOM genutzt
werden :
Zum Beispiel :

private void Form1_Load(object sender, System.EventArgs e)
{
//
http://msdn.microsoft.com/library/en-us/dv_vstechart/html/vsgrfwalkthroughaccessingdhtmldomfromc.asp
object o=null; string URL=@"http://www.franksseite.de";
axWebBrowser1.Navigate(URL,ref o,ref o,ref o,ref o);
}

private void axWebBrowser1_DocumentComplete(object sender,
AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
IHTMLDocument2 HTMLDocument = (IHTMLDocument2) axWebBrowser1.Document;
IHTMLFramesCollection2 Objekte = HTMLDocument.frames; //images
listBox1.Items.Clear();
for (int i=0; i<Objekte.length; i++)
{ object j = (object)i;
IHTMLWindow2 el = (IHTMLWindow2) Objekte.item(ref j);
listBox1.Items.Add(el.document.title);
}
}


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
http://Dzaebel.NET
Matthias Heise
2005-05-08 19:17:23 UTC
Permalink
Hallo,

danke für den Tip. Die Richtung stimmt schonmal. Leider hab ich bisher wenig
Ahnung welche Klasse/Komponente ich in das Projekt einbinden muß, damit ich
diese AxWebbrowser..... Funktionen nutzen kann. Dies nutzt dann auch nur IE?

Danke

Matthias
Herfried K. Wagner [MVP]
2005-05-08 19:33:56 UTC
Permalink
Hallo Matthias!
Leider hab ich bisher wenig Ahnung welche Klasse/
Komponente ich in das Projekt einbinden muß, damit ich diese
AxWebbrowser..... Funktionen nutzen kann.
INFO: WebOCHostCSharp.exe Hosts the WebBrowser Control in C# .NET
<URL:http://support.microsoft.com/?scid=kb;EN-US;326217>
Dies nutzt dann auch nur IE?
Ja.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Arne Janning
2005-05-08 19:42:27 UTC
Permalink
Hallo Matthias!

"Matthias Heise" schrieb
Post by Matthias Heise
danke für den Tip. Die Richtung stimmt schonmal. Leider hab ich bisher
wenig Ahnung welche Klasse/Komponente ich in das Projekt einbinden muß,
damit ich diese AxWebbrowser..... Funktionen nutzen kann. Dies nutzt dann
auch nur IE?
Du kannst in der Steuerelemente-Toolbox von VS.NET rechtsklicken, dann
"Choose Items..." (heisst auf Deinem Rechner sicher anders, aber ich habe
momentan nur Zugriff auf eine englische VS 2005 B2-Version), dann
COM-Components, und dann "Microsoft Webbrowser" auswählen. Das Control
kannst Du dann wie jedes andere auch auf Dein Formular ziehen.

Für den Zugriff auf das DOM des IE brauchst Du noch einen Verweis auf die
"Microsoft HTML Object Library" (findest Du ebenfalls auf der COM-Seite
unter Verweise --> Verweis hinzufügen...)

Gruß

Arne Janning
Matthias Heise
2005-05-08 19:20:01 UTC
Permalink
Sorry, habs gefunden. Danke für den Link zu Microsoft.

Matthias
Matthias Heise
2005-05-08 19:31:41 UTC
Permalink
Noch eine kurze Frage zu dem Thema. Kann ich IE dann auch mitteilen, daß er
eine URL jetzt nicht über die bestehende Verbindung laden soll, sondern über
ein anderes Gerät im Netzwerk, also ein anderes Gateway?

Matthias
Arne Janning
2005-05-08 19:36:13 UTC
Permalink
Hallo Matthias!

"Matthias Heise" schrieb
Post by Matthias Heise
ich möchte in meinem Projekt (C#) einen Browser (IE oder Firefox oder was
auch immer) mitteilen, welche URL aufgerufen werden soll. Sobald das
Dokument geladen ist, möchte ich jedoch weiterhin Zugriff auf den Inhalt
haben. Also den DOM auslesen und eventuell Textboxen etc. ferngesteuert
füllen können.
Kann mir jemand vielleicht einen Rat geben mit welchem Browser sowas am
besten geht und ob über .NET oder COM. Oder gibt es in der .NET
Klassenbibliothek was brauchbares dazu?
In den "101 Visual Basic and C# Code Samples" befindet sich ein voll
lauffähiges Beispiel:
"Interop - Automate IE"

http://www.microsoft.com/downloads/details.aspx?FamilyID=08e3d5f8-033d-420b-a3b1-3074505c03f3

Daran kannst Du sehen, wie Du den IE entweder auf Deinem eigenen Formular
hostest, oder den IE komplett fernsteuerst.

Alternativ:
http://www.codeproject.com/csharp/AutomatingInternetExplore.asp

So richtig Spass macht das aber nicht: mach Dich auf umfangreiches
Trial&Error, Fluchen&Beten gefasst. (Ich hatte hier schon ein paar Beispiele
zu den Absonderlichkeiten des IE-Interops gepostet, ich finde sie jetzt aber
nicht mehr.)

In 2.0 gibt es endlich eine funktionierende Lösung:
http://msdn2.microsoft.com/library/5d67hf8a(en-us,vs.80).aspx
http://msdn2.microsoft.com/library/d9bt3dad(en-us,vs.80).aspx

Gruß

Arne Janning
Herfried K. Wagner [MVP]
2005-05-08 19:52:00 UTC
Permalink
Hallo Arne!
Post by Arne Janning
[IE/WebBrowser]
http://msdn2.microsoft.com/library/5d67hf8a(en-us,vs.80).aspx
... mit ärgerlichen Limitierungen wie etwa:

<URL:http://lab.msdn.microsoft.com/productfeedback/viewFeedback.aspx?feedbackid=c5aa05c2-73ce-40af-b6b1-7b5900cf4e9f>

;-)
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Arne Janning
2005-05-08 20:07:28 UTC
Permalink
Post by Arne Janning
So richtig Spass macht das aber nicht: mach Dich auf umfangreiches
Trial&Error, Fluchen&Beten gefasst. (Ich hatte hier schon ein paar
Beispiele zu den Absonderlichkeiten des IE-Interops gepostet, ich finde
sie jetzt aber nicht mehr.)
Ein paar gute Links, die einem vielleicht viel Fluchen&Beten ersparen:
http://discuss.develop.com/archives/wa.exe?A2=ind0410a&L=dotnet-winforms&P=3653

Gruß

Arne Janning
Matthias Heise
2005-05-08 20:10:40 UTC
Permalink
Ich lad mir gerade die Beispiele runter. Was ich bisher jedoch gesehen habe,
setzte voraus, daß es ein Browserelement in meinem Formular gab
(AxWebBrowser...). Geht das auch ohne? Also daß ich einfach den IE
standardmäßig offen habe und dennoch steuere?

Matthias
Matthias Heise
2005-05-08 20:14:13 UTC
Permalink
habs schon gefunden @ C# sample

Loading...