GetElementByID von String ohne WebBrowser
Hallo,
Ich hab folgendes Problem:
Ich möchte von einer bekannten Webseite Werte auslesen. Jetzt möchte ich aber keinen WebBrowser verwenden, zum einen aus dem Grund, dass ich dann über Events schauen muss, ob die Seite fertig geladen hat und zum anderen - und das ist das komische - wenn ich mit einem Browser, der nicht IE heißt, den QuellCode aufruf, dann findet man zum Beispiel den Code
Wenn ich allerdings von der gleichen Seite den QuellCode mittels IE oder dem WebClient hole, siehts auf einmal so aus:
Das nervt furchtbar, da ich so nicht einfach im Google Chrome über "Element untersuchen" den richtigen HTML-Tag (also das Element) raussuchen kann, aber egal, das ist ja erst mal nicht meine Frage...
Ich suche schon länger eine Möglichkeit wie ich aus einem String ein HtmlDocument machen kann ohne den Umweg über einen WebBrowser. Also in etwas so:
Im Grunde würde es mir reichen, wenn ich auf folgendes zugreifen kann:
Wie mach ich das?
Hier hatte jemand das gleiche Problem, es wurde aber leider nicht gelöst. das was der dortige Fragesteller möchte, ist genau das was ich möchte.
//EDIT
So, wollte ich es eigentlich nicht machen:
Es wäre super, wenn mir da jemand auf die Sprünge helfen könnte (eine externe DLL kommt leider nicht in Frage).
Gruß Chris
Ich hab folgendes Problem:
Ich möchte von einer bekannten Webseite Werte auslesen. Jetzt möchte ich aber keinen WebBrowser verwenden, zum einen aus dem Grund, dass ich dann über Events schauen muss, ob die Seite fertig geladen hat und zum anderen - und das ist das komische - wenn ich mit einem Browser, der nicht IE heißt, den QuellCode aufruf, dann findet man zum Beispiel den Code
<div id="w1-16-_mtb" class="notranslate u-flL bid-note">Geben Sie mehr als EUR 41,00 ein</div>
Wenn ich allerdings von der gleichen Seite den QuellCode mittels IE oder dem WebClient hole, siehts auf einmal so aus:
<div id="w1-15-_mtb" class="notranslate u-flL bid-note">Geben Sie mehr als EUR 41,00 ein</div>
Das nervt furchtbar, da ich so nicht einfach im Google Chrome über "Element untersuchen" den richtigen HTML-Tag (also das Element) raussuchen kann, aber egal, das ist ja erst mal nicht meine Frage...
Ich suche schon länger eine Möglichkeit wie ich aus einem String ein HtmlDocument machen kann ohne den Umweg über einen WebBrowser. Also in etwas so:
Function StringToHtml(ByVal s As String) As HtmlDocument
Im Grunde würde es mir reichen, wenn ich auf folgendes zugreifen kann:
- GetElementByID
- GetElementByClassName
Wie mach ich das?
Hier hatte jemand das gleiche Problem, es wurde aber leider nicht gelöst. das was der dortige Fragesteller möchte, ist genau das was ich möchte.
//EDIT
So, wollte ich es eigentlich nicht machen:
Public Shared Function HtmlDocumentFromString(ByVal sSource As String) As HtmlDocument
Using w As New WebBrowser With {.Url = New Uri("about:blank"), .ScriptErrorsSuppressed = True}
Dim doc As HtmlDocument = CType(w.Document, HtmlDocument) : doc.OpenNew(True) : doc.Write(sSource)
Return w.Document
End Using
End Function
Es wäre super, wenn mir da jemand auf die Sprünge helfen könnte (eine externe DLL kommt leider nicht in Frage).
Gruß Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 294843
Url: https://administrator.de/contentid/294843
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
13 Kommentare
Neuester Kommentar
Cherio,
fk
VMWare , Silicon Valley
Wenn ich allerdings von der gleichen Seite den QuellCode mittels IE oder dem WebClient hole, siehts auf einmal so aus:
Logisch, eine Webseite kann den Useragent auswerten und entsprechend eine Seite anders formatieren oder entsprechende Klassen hinzufügen. Den Useragent kann man bei einem WebRequest etc. auch angeben.Im Grunde würde es mir reichen, wenn ich auf folgendes zugreifen kann:
GetElementByID
GetElementByClassName
Wie mach ich das?
GetElementByID
GetElementByClassName
Wie mach ich das?
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim html As HtmlDocument = StringToHTML("<html><body><p id=""TestID"">Das ist ein Test</p><body></html>")
Dim obj As HtmlElement = html.GetElementById("TestID")
MsgBox(obj.innerText)
End Sub
Function StringToHTML(s As String) As HtmlDocument
Dim wb As New WebBrowser
wb.Navigate("about:blank")
Dim htdoc As HtmlDocument = wb.Document.OpenNew(True)
htdoc.Write(s)
Return htdoc
End Function
End Class
VMWare , Silicon Valley
Aber ist das sauber??
Warum nicht, wenns funktioniert und macht was es soll ...
Dann schreib dir halt deine eigenen Klassen und HTML-Parser vielleicht genügts dir ja dann ...
Btw. mit Regex lässt sich alles extrahieren da braucht es kein Dummie-HTMLDocument ...
Btw. mit Regex lässt sich alles extrahieren da braucht es kein Dummie-HTMLDocument ...
Kommt drauf an was du genau extrahieren willst. Kenne den Inhalt deines Files ja nicht.
Zitat von @Aicher1998:
Sollte doch allgemein funktionieren oder?
Außer halt bei Felder ohne dem schließenden tag aber das lässt sich ja noch schnell ändern
Wenn es um verschachtelte Tags (HTML in HTML-Tag) geht dann nicht Sollte doch allgemein funktionieren oder?
Außer halt bei Felder ohne dem schließenden tag aber das lässt sich ja noch schnell ändern
http://htmlagilitypack.codeplex.com/
Moin,
Beispiel:
Du willst den gesamten HTML-Inhalt des DIVs mit der ID outer erfassen, dann wird dein Regex beim schließenden Tag DIV mit der ID inner aufhören und den Text "Noch mehr Text" nicht mit erfassen
Gruß jodel32
Wieso nicht?
@126919 hat recht.Beispiel:
Du willst den gesamten HTML-Inhalt des DIVs mit der ID outer erfassen, dann wird dein Regex beim schließenden Tag DIV mit der ID inner aufhören und den Text "Noch mehr Text" nicht mit erfassen
<div id="outer">
Outertext
<div id="inner">InnerText</div>
Noch mehr Text
</div>
Eigenen HTML-Parser schreiben oder mit mshtml arbeiten, das gibt's auf jedem Windows.