[VB8] Zu einer bestimmten Website stelle springen?

yunses

Mitglied
Hallo,
ich bräuchte Hilfe für mein Programm:

Ich möchte gerne einen Webbrowser haben, der zu einer festgelegten URL + den Textboxinhalt springt.

Nun soll eine bestimmte Stelle im Quelltext der Seite oder in der Seite selbst etwas rauskopiert und in eine neue Textbox eingefügt werden.

Danke im Voraus
 
  1. WebBrowser Steuerelement auf die Form ziehen
  2. Funktion Navigate des Webbrowser mit der gewünschten Url aufrufen.
  3. Mit Hilfe der Eigenschaft Document des Webbrowser gewünschten Tag suchen.
  4. Bei gefundenem Tag die Eigenschaft InnerText auslesen.
 
Letztlich ist eine Webseite nur eine Textdatei deren Inhalt mit Hilfe von HTML definiert wurde. D.h. du kannst mit Hilfe der Methoden aus der String-Klasse bestimmte Zeichenketten (wie den Tag) suchen und extrahieren.

//edit: und wenn ich Spyke richtig verstehe brauchst du nochnichtmal den Umweg über die String Methoden zu machen, sondern du kannst das HTML Document wie eine XML Datei lesen, d.h. tendenziell sollte es möglich sein mit Hilfe von XPath-Ausdrücken bestimmte Tags direkt anzusprechen und dann deren Inhalt auslesen.
PS: Ich habe das WebBrowser-Control bisher noch nie verwendet.
 
Zuletzt bearbeitet:
Also mit den Tags ist das etwas schwer..., denn überall sind die gleichen Tags :confused:

Also ich möchte gerne bei http://www.who.is/whois-de/ip-address/chip.de/ die Daten von [Holder] kopieren und diese später verarbeiten.
Nur ist die Frage, wie ich diese Daten bei [Holder] bekomme.

Die Tags schauen so aus:

Code:
<br>[Holder]
<br>Type:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORG
<br>Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vogel Burda Holding GmbH
<br>Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Poccistrasse 11
<br>Pcode:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80336
<br>City:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Muenchen
<br>Country:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DE
<br>Changed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2005-08-16T11:26:10+02:00
<br>

Nun möchte ich genau den Namen, Straße, Wohnort, Land und die Postleitzahl kopiert bekommen und in eine Textbox eingefügt bekommen.

Natürlich ist chip.de nur ein Beispiel!
 
@FwDonnerbalken
Könnte man wenn es wirklich eine XHTML, aber wenn ich mir den br Tag so anschauen bezweifle ich das mal stark.
Aber mit der Eigenschaft Document hat man schon direkt Zugriff auf alle Tags der Seite so das man nicht selbst parsen braucht.

@yunses
Bitte warte wenigstens 24 Stunden bis du den Thread wieder nach oben puchst.
Ich kam zum Beispiel erst vor ner Stunde nach Haus (war im Proll Tempel).

Hier bissel ungetesteter Code

Es werden rekursiv die Element durchlaufen,
rekursiv da ich nicht weiß ob All wirklich alle Tags liefert.

Den einzigen Anhaltspunkt den ich erstmal finden konnte ist das der gesuchte Text als Parent Tag ein td Tag hat mit einer Klassenbeschreibung wrap.
Da es wrap aber anscheinend mehrmals gibt wird geprüft ob im inneren Tag Text das Wort [Holder] vorkommt.
C#:
HtmlElement he;
if (FindElement(WebBrowser.Document.All, out he))
{
}

...

private bool FindElement(HtmlElementCollection collection, out HtmlElement findedElement)
{
   foreach (HtmlElement el in collection)
   {
      if (string.Equals(el.TagName, "td", StringComparison.CurrentCultureIgnoreCase))
      {
          if (string.Equals(el.GetAttribute("class"), "wrap", StringComparison.CurrentCultureIgnoreCase))
          {
              if (el.InnerText.Contains("[Holder]"))
              {
                   findedElement = el;
                   return true;
              }
          }
      }

      if (FindElement(el.All, out findedElement))
          return true;
   }
}
Code:
Dim he As HtmlElement
If FindElement(WebBrowser.Document.All, he) Then
End If

...

Private Function FindElement(ByVal collection As HtmlElementCollection, ByRef findedElement As HtmlElement) As Boolean
    For Each el As HtmlElement In collection
        If String.Equals(el.TagName, "td", StringComparison.CurrentCultureIgnoreCase) Then
            If String.Equals(el.GetAttribute("class"), "wrap", StringComparison.CurrentCultureIgnoreCase) Then
                If el.InnerText.Contains("[Holder]") Then
                    findedElement = el
                    Return True
                End If
            End If
        End If
        
        If FindElement(el.All, findedElement) Then
            Return True
        End If
    Next
End Function
Nun hast du das HtmlElement und kannst deine Sachen per strin Operationen suchen.

P.S.: Im laufe des Schreiben viel mir auf das man ev. gleich alles per String Operation suchen könnte (aber es ist spät und ich bin müde) und da der Quelltext dynamisch generiert wird weiß ich auch nicht ob das immer so günstig ist.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück