webbrowser html auslesen zur laufzeit

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    webbrowser html auslesen zur laufzeit

    Neu

    Hallo zusammen.
    Ich versuche mit der Webbrowser komponente eine Website zu öffnen und einen bestimmten teil auszulesen.
    Wenn ich die Seite vorher z.B. mit chrome öffne und untersuche steht dort an der Stelle wo ich den inhalt von haben möchte:

    HTML-Quellcode

    1. <div id="ID-overviewCounterValue" class="_GAnGb" style="text-shadow: rgb(255, 255, 255) 0px 0px 100px;">0</div>


    Am ende diese Null müsse ich schaffen irgendwie in ein label zu packen .... Diese 0 kann allerding jede beliebige andere Zahl sein.

    Es müsste doch irgendwie gehen oder?
    Ich habe es mit folgender Variante versucht:

    VB.NET-Quellcode

    1. Dim element = WebBrowser1.Document.GetElementById("ID-overviewCounterValue")
    2. Label1.Text = element.ToString

    doch leider gibt mir dies nur : system.windows.forms.htmlElement zurück.

    Kann mir da jemand etwas unter die Arme greifen?

    Danke im voraus.

    Neu

    funktioniert so aber nur wenn alles vor der null immer identisch ist, wenn sich das ändern kann muss das Suchpattern variabel gestaltet werden (nicht grad leicht(find ich zumindest :P )) :

    VB.NET-Quellcode

    1. #Region "Imports"
    2. Imports System.Text.RegularExpressions
    3. #End Region
    4. Public Class Main
    5. Public Sub ReadOut()
    6. Dim SampleString As String = "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb(255, 255, 255) 0px 0px 100px;"">0</div>" 'hier nimmste den Quellcode der Seite
    7. Dim a As Match = Regex.Match("lala", "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb\(255, 255, 255\) 0px 0px 100px;"">(.*)</div>", RegexOptions.IgnoreCase)
    8. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' und a.Groups(1).Value.ToString enthält das ergebniss
    9. End Sub
    10. End Class


    Greets
    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Neu

    DAnke für die super schnelle Antwort !
    Bin leider anfänger... habe folgendes versucht:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("https://analytics.google.com/analytics/web/#realtime/rt-overview/1234568790")
    5. End Sub
    6. Public Sub ReadOut()
    7. Dim SampleString As String = "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb(255, 255, 255) 0px 0px 100px;"">0</div>" 'hier nimmste den Quellcode der Seite
    8. Dim a As Match = Regex.Match("lala", "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb\(255, 255, 255\) 0px 0px 100px;"">(.*)</div>", RegexOptions.IgnoreCase)
    9. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' und a.Groups(1).Value.ToString enthält das ergebniss
    10. End Sub
    11. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    12. ReadOut()
    13. End Sub
    14. End Class

    müsste dies nicht auf jeden fall eine messagebox erzeugen? egal welche seite geladen ist?

    bzw. dort wor lala steht muss doch eigentlich "SampleString" hin oder verstehe ich da was total falsch?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „einfach112“ ()

    Neu

    nein da die IF-Abfrage sagt If a.Success, das kann aber ja nicht erfolgreich sein, denn in "lala" ist ja nicht das enthalten was du suchst, also ist a.success = False, somit kein Success, somit auch keine MessageBox
    Und ja stimmt genau ^^ ersetze "lala" durch SampleString, aber vergiss nicht dem Samplestring in diesem Beispiel noch den Quellcode der Webseite zuzuweisen (stichwort: WebBrowser1.DocumentText)
    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Neu

    DANKE DANKE DANKE .... aaaaber
    Klar am Ende werde ich SampleString durch den quelltext ersetzen.
    Aber aktuell müsste es doch dann klappen.
    im SampleString steht doch das von mir gesuchte.
    Dann müsste doch if a.Success auch true sein oder nicht? es steht doch in SampleString drin:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("https://analytics.google.com/analytics/web/#realtime/rt-overview/123456789/")
    5. End Sub
    6. Public Sub ReadOut()
    7. Dim SampleString As String = "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb(255, 255, 255) 0px 0px 100px;"">0</div>" '< Das hier ist ja der zu durchsuchende String. Dieser enthält ja das was ich suche
    8. Dim a As Match = Regex.Match("SampleString", "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb\(255, 255, 255\) 0px 0px 100px;"">(.*)</div>", RegexOptions.IgnoreCase)
    9. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' Das if a.success muss doch in der hier geposteten Variante immer true sein (Meiner meinung nach.???)
    10. End Sub
    11. Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    12. ReadOut()
    13. End Sub
    14. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    15. ReadOut()
    16. End Sub
    17. End Class


    Ich verstehe einfach nicht wie if a.success nicht true sein kann wenn ich es so in meinem Programm eingebe?

    DANKE im voraus!

    Neu

    Dim a As Match = Regex.Match("SampleString", "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb\(255, 255, 255\) 0px 0px 100px;"">(.*)</div>", RegexOptions.IgnoreCase)


    Samplestring ist eine StringVariable, eine Variable verwendet man nicht in "", ersetze

    "SampleString" durch SampleString

    die C&P-Bremse mal aussen vor gelassen, wäre es folgendermaßen richtig (mit der Ausname das SampleString noch nicht den Quellcoder der Seite enthält):

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("https://analytics.google.com/analytics/web/#realtime/rt-overview/123456789/")
    5. End Sub
    6. Public Sub ReadOut()
    7. Dim SampleString As String = "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb(255, 255, 255) 0px 0px 100px;"">0</div>" '< Das hier ist ja der zu durchsuchende String. Dieser enthält ja das was ich suche
    8. Dim a As Match = Regex.Match(SampleString, "<div id=""ID-overviewCounterValue"" class=""_GAnGb"" style=""text-shadow: rgb\(255, 255, 255\) 0px 0px 100px;"">(.*)</div>", RegexOptions.IgnoreCase)
    9. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' Das if a.success muss doch in der hier geposteten Variante immer true sein (Meiner meinung nach.???)
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. ReadOut()
    13. End Sub
    14. End Class

    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „asusdk“ ()

    Neu

    Oha oha... also ich habe ein kleines tool zu regex..... also das soll ja nur z.b. wörter ersetzen..... aber mmmmhhhh......
    Teste ich mogen auf der Arbeit mal... liege schon im bett..... danke schonmal vorab...

    Neu

    soooo.... Da bin ich schon wieder zuhause.....
    Aaaallllssooooo
    soweit so gut ....
    muss für den Quelltest allerdings :

    VB.NET-Quellcode

    1. ​WebBrowser1.Document.Body.InnerHtml.ToString

    nutzen.
    Habe mir den Inhalt davon in eine richtextbox ausgeben lassen.... jetzt steht dort im Quelltext ganz genau folgendes : (100% copy aus quelltext)

    HTML-Quellcode

    1. <div class="_GAnGb" id="ID-overviewCounterValue">0</div>


    also musste ich meinen SampleString etwas abändern.... seitdem geht es nicht mehr.
    Was habe ich denn jetzt schon wieder vergeigt?
    Ist doch richtig so oder?:

    VB.NET-Quellcode

    1. Dim a As Match = Regex.Match(SampleString, "<div class=""_GAnGb"" id=""ID-overviewCounterValue"">(.*)</div>", RegexOptions.IgnoreCase)​

    Neu

    Ich habs eben getestet, funktioniert hier problemlos

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Main
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. WebBrowser1.Navigate("https://analytics.google.com/analytics/web/#realtime/rt-overview/123456789/")
    5. End Sub
    6. Public Sub ReadOut()
    7. Dim SampleString As String = "<div class=""_GAnGb"" id=""ID-overviewCounterValue"">0</div>" '< Das hier ist ja der zu durchsuchende String. Dieser enthält ja das was ich suche
    8. Dim a As Match = Regex.Match(SampleString, "<div class=""_GAnGb"" id=""ID-overviewCounterValue"">(.*)</div>", RegexOptions.IgnoreCase)
    9. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' Das if a.success muss doch in der hier geposteten Variante immer true sein (Meiner meinung nach.???)
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. ReadOut()
    13. End Sub
    14. End Class
    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Neu

    fehler gefunden .....
    Wenn die Zahl von 0 z.b. auf 1 steigt ... dann ändert sich auch der quelltext:
    0 = <div class="_GAnGb" id="ID-overviewCounterValue">0</div>
    1 = <div class="_GAnGb" id="ID-overviewCounterValue" style="text-shadow: 0px 0px 100px #ffffff;">1</div>
    WTF.... shit


    bringt mir aber auch nix .... geht trotzdem nicht ..... *WEINEN*

    Neu

    versuchs ma so:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. WebBrowser1.Navigate("https://analytics.google.com/analytics/web/#realtime/rt-overview/123456789/")
    3. End Sub
    4. Public Sub ReadOut()
    5. Dim SampleString As String = "<div class=""_GAnGb"" id=""ID-overviewCounterValue"">0</div>" '< Das hier ist ja der zu durchsuchende String. Dieser enthält ja das was ich suche
    6. Dim a As Match = Regex.Match(SampleString, "<div class=""_GAnGb.*"">(.*)</div>", RegexOptions.IgnoreCase)
    7. If a.Success Then MessageBox.Show(a.Groups(1).Value.ToString) ' Das if a.success muss doch in der hier geposteten Variante immer true sein (Meiner meinung nach.???)
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. ReadOut()
    11. End Sub

    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Neu

    erst noch einmal vielen vielen dank für deine viele hilfe....
    Der code oben hatte ja schon heute morgen funktioniert .... allerdings musste ich den quellcode anders einlesen....


    Ich glaube es liegt daran wie ich den quelltest jetzt hole.......
    aktuell nutze ich ja : Dim SampleString As String = WebBrowser1.Document.Body.InnerHtml.ToString
    Bin mir nicht sicher ob das so gut ist da dort ja hunderte sonderzeichen drin sind wie " ;() usw usw....

    ich glaube ich muss den quelltext einfach in einer Datei schreiben und dort verlgleichen oder?

    Neu

    mit meiner letzten anpassung müsste es eig. schon funktionieren, da das SearchPattern nun variabler ist
    des weiteren mach es keinen unterschied ob der String aus einer Datei kommt oder von einer seite selbst, man muss nur am Searchpattern drehen bis es passt ^^
    Wer anderen eine Bratwurst brät, der hat ein Bratwurst-bratgerät :D

    Neu

    hier auszug....
    Public Sub ReadOut()
    Dim samplestring As String = Nothing
    samplestring = WebBrowser1.Document.Body.InnerHtml.ToString
    Dim a As Match = Regex.Match(samplestring, "<div class=""_GAnGb"" id=""ID-overviewCounterValue"" style=""text-shadow: 0px 0px 100px #ffffff;"">(.*)</div></div><div>", RegexOptions.IgnoreCase)
    If a.Success Then Label1.Text = a.Groups(1).Value.ToString
    End Sub

    mmmmhhhhhhhh
    Was ich jetzt wohl immer noch nicht verstehe LOL:
    if a.success then... warum kommt da kein endif ?
    Das ganze funktioniert jetzt nur wenn die zahl mindestens 1 ist .... wenn null dann passiert nix ... hat halt mit dem style zu tun.....
    aber wie kann ich jetzt sagen if a. kein success then label1.text = 0 ?





    .....
    alles sehr sehr komig .... das geht von alleine auf 0 ....