RegEx Seitenquelltext auslesen (Problem)

  • VB6

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von nawiat.

    RegEx Seitenquelltext auslesen (Problem)

    Hey Leute ^^

    Ich sitze jetzt geschlagene 2 Tage drann, aber ich bin zu blöd für RegEx um Seitenquelltext auszulesen. Ich hoffe ihr könnt mir helfen das RegEx Pattern für diesen Seitenquelltext zu erstellen:

    Spoiler anzeigen
    <div id="autoSelectedVersion">
    <p class="NoBottomMargin" id="AUTO_ID_columnleft_p_version"><strong>Version 14.0.0.145</strong></p>
    <p id="AUTO_ID_columnleft_p_system_requirements"><a rel="modal" title="Systemanforderungen" href="/flashplayer/modal/?content=flashSystemRequirement&loc=de&version=14.0.0.145&os=Windows&fakeajax" id="AUTO_ID_columnleft_a_system_requirements">Systemanforderungen</a></p>

    <p class="NoBottomMargin" id="AUTO_ID_columnleft_p_your_system">Ihr System:</p>
    <p class="NoBottomMargin" id="AUTO_ID_columnleft_p_platform"><strong>Windows 64-bit , <span id="language"><strong>Deutsch</strong></span>, Firefox</strong></p>
    <p id="AUTO_ID_columnleft_p_need_other_version"><a id="need_other_version" href="/de/flashplayer/otherversions/">Brauchen Sie Flash Player für einen anderen Computer?</a></p>
    <p id="AUTO_ID_columnleft_p_distribute"><a rel="modal" href="/flashplayer/modal/?content=flashDistribute&loc=de&version=14.0.0.145&fakeajax" id="AUTO_ID_columnleft_a_distribute">Sind Sie IT-Manager oder ein OEM?</a></p>
    </div>


    das Rot makierte soll er mir in eine Textbox schreiben. Das ist mein Code wo eben noch das Pattern fehlt:

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Private Sub JavaVersioCheck()
    2. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://get.adobe.com/de/flashplayer/")
    3. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    4. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    5. Dim httpContent As String = reader.ReadToEnd
    6. TextBox1.Text = httpContent
    7. Dim ipRegEx As New Regex("Hier das Pattern")
    8. Dim myIP As String = ipRegEx.Match(httpContent).Groups("string").ToString()
    9. lvProgramme.Items.Item(0).SubItems.Add(myIP)
    10. End Sub


    hoffe jemand kann sich die Zeit nehmen und mir helfen, das wäre echt nice...

    MFG Peter

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „nawiat“ ()

    geht iwi nicht, ist das der Flasche code von mir ? weil er gibt mir nichts aus.

    hier die Seite von dem Seitenquellcode:
    get.adobe.com/de/flashplayer/

    Dort will ich die Version auslesen. aber mein Code kann auch falsch sein XD

    wäre nice wenn du mir weiterhelfen könntest :)

    MFG Peter

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

    Edit:

    hätte jetzt nen Code der ohne Textbox funktionieren sollte. aber mir wird immer noch nichts mit dem Pattern ausgegeben. Wie soll das den sonst Funktionieren ? :(

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://get.adobe.com/de/flashplayer/")
    2. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    3. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    4. Dim httpContent As String = reader.ReadToEnd
    5. Dim ipRegEx As New Regex("<strong>Version (?<version>.*?)</strong>")
    6. Dim myIP As String = ipRegEx.Match(httpContent).Groups("string").ToString()
    7. lvProgramme.Items.Item(0).SubItems.Add(myIP)


    MFG nawiat

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Win32
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim Key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Macromedia\FlashPlayer")
    6. If Not Key Is Nothing Then
    7. Dim Version As String = Key.GetValue("CurrentVersion").ToString
    8. MessageBox.Show("Ihre aktuelle Flashplayer Version ist : " & Version)
    9. End If
    10. End Sub
    11. End Class

    =O
    Von deiner Webseite die URL Währe - http://get.adobe.com/de/flashplayer/?fpchrome
    Und das ist en Container =O

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

    @TVX:
    warum schreibst du mir den Code ? den hab ich schon in meinen Programm, mir ging es jetzt wirklich nur darum auf der Adobe Website die Aktuelle Version auszulesen. Da wollt ich wissen ob meine Code richtig ist und wie das Pattern lautet weil ich mich damit nun mal garnicht auskenne :D wäre nice, weil das soll fertig werden damit ich es verteilen kann ^^

    @nafets3646:
    wenn ich es ersetze geht es immernoch nicht :( noch jemand vieleicht ne Idee ?

    MFG Peter
    Schau dir mal den String an den du runterlädst! Der Server liesst dein OS und Version und Architektur über den Browser anhand des gesendeten Headers aus und macht dir den download bereit, zeigt auch die Version an. "Version 14.0.0.145" steht nicht im Quelltext wenn du das mit einem Webclient oder WebRequest ohne Header runterlädst.

    Live http headers schrieb:

    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0

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

    ? :D jetzt versteh ich garnichts mehr...
    Was soll der Browser machen ? und was meinst du mit "liesst dein OS und Version und Architektur über den Browser anhand des gesendeten Headers aus"

    und was hat "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0 " zu bedeuten ?

    MFG Peter
    Sag ich doch - Steht nicht drin !

    Und bevor du mich steinigst - Ja ich habs nicht so mit Regex aber ich weis mir wenigstens zu helfen
    Und mehme deshalb auch diese Seite :saint:
    playerversion.de/

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim DownloadString_Client As New Net.WebClient
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. If DownloadString_Client.IsBusy = False Then
    6. DownloadString_Client.DownloadStringAsync(New Uri("http://www.playerversion.de/"))
    7. AddHandler DownloadString_Client.DownloadStringCompleted, AddressOf DownloadString_Client_DownloadCompleted
    8. End If
    9. End Sub
    10. Private Sub DownloadString_Client_DownloadCompleted(sender As Object, e As Net.DownloadStringCompletedEventArgs)
    11. If e.Error IsNot Nothing Then
    12. MessageBox.Show(e.Error.Message)
    13. Else
    14. MessageBox.Show(e.Result().Split({"<li>Windows: <a href=""http://get.adobe.com/flashplayer/"">"}, StringSplitOptions.None)(1).Split({"</a></li>"}, StringSplitOptions.None)(CInt(("0"))))
    15. End If
    16. End Sub
    17. End Class


    Diese Seite bietet mir alles was das Hertz begehrt :

    Deine Adobe® Flash Player Version istWIN 13,0,0,133

    Die letzten Adobe® Flash Player Versionen sind:
    Linux: 11.2.202.341
    OS X: 13.0.0.206
    Windows: 14,0,0,145
    Windows 8: 14,0,0,145

    Hilfreich ? ;)
    Der User-Agent ist der Webbrowser. Mit diesem Header werden Browsername, BrowserVersion, OS, OS-Architektur und die Browserengine übermittelt, das wertet der Server dann aus und kann darauf reagieren.

    de.wikipedia.org/wiki/User_Agent

    Falls du den FF installiert hast(kann es auch für andere geben???), installier dir mal das Plugin Live HTTP Headers, dann kannst du das ein wenig nachvollziehen was da gesendet wird, wie Anfrage und Antwort in etwa abläuft.
    So, ich habe mal geschaut, was der vom Programm heruntergeladene Quelltext beinhaltet, jedenfalls ich keine Versionsnummer drin. Es bringt übrigens auch nichts, einen User-Agent-Header mitzuschicken, mit welchem man sich als Firefox oder so ausgibt sondern die Version steht einfach nicht auf der Website.
    @nafets3646

    Doch steht drin! Hab das jetzt selbst getestet. Warum sollte es so denn nicht gehen? Der Server braucht halt den User-Agent-Header um den Download überhaupt vorschlagen zu können, da die Scirpte dort halt so geschrieben sind.

    VB.NET-Quellcode

    1. Dim w As New Net.WebClient
    2. w.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0 ")
    3. Dim s As String = w.DownloadString("http://get.adobe.com/de/flashplayer/")
    4. Dim r As New Regex("(?<=<strong>Version )(.*?)(?=</strong>)")
    5. Dim m As MatchCollection = r.Matches(s)
    6. For i = 0 To m.Count - 1
    7. MessageBox.Show(m(i).ToString)
    8. Next


    Natürlich muss er wenn es auf verschieden Systemen laufen soll, den Header selbst passend erstellen.
    @nafets3646:
    klar ist in dem Seitenquelltext von get.Adobe Flashplayer eine Versionsangabe XD drück STRG+F gib "Version 14" ein und schon hast du die stelle die ich will.

    @TVX:
    :O wie ging das den jetzt so schnell ? XD zeigt er mir meine an oder die unten hinter Windows steht ? ^^ warum kenn ich die seite eigendlich nicht ? XD gibt es die Seite nur für Flash player ?

    MFG Peter
    @Murdock:
    Wie hast du das den jetzt gemacht ? vorher ging es mit dem selben Pattern nicht... nur wegen dem User-Agent und so ? wie kann ich das machen das es auf allen System funktioniert .... Danke dir von Janzen Herzen XD

    MFG Peter
    Ja das liegt nur am Header. Adobe liesst den Header und weiss welche Version du brauchst und schlägt dir die Aktuellste davon vor, den Flashplayer gibt es ja für 32Bit/64Bit, Windows, Unix, Mac etc... Um den User es einfach zu machen, machen die es halt so. Es gibt auch Server die nur die gewünschte Antwort liefern wenn der entsprechende UserAgent angegeben ist.

    Wenn Webseiten ein Responsive-Design verwenden, wird auch dieser Header ausgwewertet, damit es dann z.B. auf kleinen Display von Handys entsprechend dargestellt wird.

    Für den Header muss du auslesen welches OS verwendet wird und die Architektur, ich weiss nicht ob es da bei 32/64bit unterschiedliche Datums zum releasen gibt. Die Browserkennung ist eigendlich nicht relevant, ob nun IE, FF, Chrome....

    Wenn für 32/64Bit die Releases zur gleichen Zeit vorgenommen werden, kannste immer diesen Header verwenden, ich würde das aber möglichst genau machen. Bei einem 32Bit System lässte das WOW64; im Header einfach weg.