Webbrowser 'href' Link auslesen und anklicken

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Link275.

    Webbrowser 'href' Link auslesen und anklicken

    Hallo,

    ich weiß das es einige ähnliche Themen zu diesem Thema gibt.
    Allerdings habe ich nach 30 Minuten immer noch keine vollständige Lösung gefunden.

    Wie lese ich einen Link auf einer Website aus, der zB. wie folgt aussieht:

    HTML-Quellcode

    1. <a href="DAS HIER AUSLSESEN">Link</a>

    -> Ist also kein Button sondern ein Link...


    Die Website hat mehrere Links, brauche aber nur den einen.


    Liebe Grüße und Danke
    Tartaros :thumbup:

    P.S.: Sollte schnell laufen ohne extra Quelltext-Downloads..

    xtts02 schrieb:

    Inhalt vom Internet holen, ohne ihn herunterzuladen?

    Eben :)

    Stichwort: RegEx (also bezüglich des Filterns ^^)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    xtts02 schrieb:

    Du könntest den Quelltest mithilfe eines WebClients herunterladen und ihn mit geeigneten Methoden wie z.B. denen von String-Klasse oder RegEx zerpflücken.
    Was mache ich hier falsch :( :

    Dim derneuewert As String = ""
    Dim input As String = "<a href=""DAS HIER AUSLSESEN"">Link</a>"
    Dim match As System.Text.RegularExpressions.Match = Regex.Match(input, "href=""(.*?)"">")
    input = input.Remove(match.Groups(1).Index, match.Groups(1).Length)
    input = input.Insert(match.Groups(1).Index, derneuewert)
    MsgBox(input)


    Bekomme alles außer den eigentlichen Link ausgegeben...
    Nutze bitte VB-Tags:

    Quellcode

    1. [code=vbnet]
    2. 'Code
    [/code]




    Tartaros schrieb:

    input = input.Remove(match.Groups(1).Index, match.Groups(1).Length)

    Da entfernst du doch dein Match ? :D
    Mach doch einfach index = match.Groups(1).ToString :)

    Außerdem musst du aufpassen, da im ganzen HTML-Text wahrscheinlich mehrere Zeilen mit diesem Pattern matchen :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    match.Groups(1).ToString
    Vielen Dank! Funktioniert soweit.

    Auch wenn ich es so mache:

    VB.NET-Quellcode

    1. Dim derneuewert As String = "" Dim input As String = "<a rel=""nofollow"" href=""http://www.WEBSITE.com/forum/login.php?do=logout&amp;logouthash=1387231945-f7504e850dbe2d2d2be3e3de9392557961377c8c"" onclick=""return log_out('Möchtest du dich wirklich abmelden?')"">Abmelden</a>" Dim match As System.Text.RegularExpressions.Match = Regex.Match(input, "href=""(.*?)""") Dim aaa As String = match.Groups(1).ToString MsgBox(aaa)



    Aber wenn ich mit einem WebClient den Quelltext downloade und ihn dann als 'input' definiere, bekomme ich als Output "". Also nix.

    Wieso :O ?
    @Andy16823::
    Das ist aber unnötig...

    @TE:
    Zeig mal den Link der Website, und den Code zum Downloaden des Quelltextes.
    Wahrscheinlich ist der Quelltext nicht richtig runtergeladen (wegen falscher URI denke ich).
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    @TE:
    Zeig mal den Link der Website, und den Code zum Downloaden des Quelltextes.
    Wahrscheinlich ist der Quelltext nicht richtig runtergeladen (wegen falscher URI denke ich).

    VB.NET-Quellcode

    1. Dim derneuewert As String = "" Dim wc As New Net.WebClient Dim input As String = wc.DownloadString("http://www.elitepvpers.com") 'Dim input As String = "<a rel=""nofollow"" href=""http://www.elitepvpers.com/forum/login.php?do=logout&amp;logouthash=1387231945-f7504e850dbe2d2d2be3e3de9392557961377c8c"" onclick=""return log_out('Möchtest du dich wirklich abmelden?')"">Abmelden</a>" Dim match As System.Text.RegularExpressions.Match = Regex.Match(input, "<a rel=""nofollow"" href=""(.*?)""") Dim aaa As String = match.Groups(1).ToString MsgBox(aaa)
    Joa, liegt halt daran das es keinen Teil im Quellcode gibt der mit dem Pattern übereinstimmt ^^
    Hab getestet, es gibt nicht mal einen der mit "<a rel" anfängt ;)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    VB.NET-Quellcode

    1. Dim htmlcode As String = "asdaf irgendeinmüll <a href=""http://www.elitepvpers.com/forum/login.php?do=logout&amp;logouthash=1387231945-f7504e850dbe2d2d2be3e3de9392557961377c8c""> click mich </a> adff und noch mehr müll"
    2. Dim re = New System.Text.RegularExpressions.Regex("""(" + System.Text.RegularExpressions.Regex.Escape("http://www.elitepvpers.com/forum/login.php?do=logout&amp;logouthash=") + ".*?)""")
    3. If re.IsMatch(htmlcode) Then
    4. Dim m As System.Text.RegularExpressions.Match = re.Match(htmlcode)
    5. Console.WriteLine(m.Groups(1))
    6. End If
    7. Console.Read()


    aba hat doch nix mit "Internet- und Netzwerkprogrammierung" zu tun =O
    einfach nach "(sdfdf.de?go=logout&hash=.*?)" suchen und du hast den ganzen link

    wie sagte mutter immer so schön, es gibt nix was sich nich mit ein bissl regex lösen lässt xDD

    edit: oh wie ich sehe steht sowas ähnliches ja scho weiter oben. nja doppelt hällt besser :)

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

    Aber wenn ich mich erst einloogen muss, dann muss das der WebClient doch auch erst, um den Link zu finden :D
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    benutz du webbrowser ?
    wenn ja, gabs da nich sowas wie "mybrowser.documentText" ?
    das sollte den gesammten seiteninhalt als string wiedergeben. den dann durch regex hauen und voila

    ansonsten könnteste dir auch auch den session cookie vom webbrowser holen und in den requestheader vom webclient packen, aber das wäre scho bissl komplizierter
    Hallo,

    Stichwort RegEx Assertions, also positive/negative Look-Behind/-Ahead. Wikipedia meint diesbezüglich:

    Kurz nachgeschlagen und schon hast du die Lösung, und zwar dergestalt dass du hierbei bei der Suche (matching) tatsächlich nur die Dinge findest, die auch gefunden werden sollen (lediglich der Link, nicht das <a, das href und sonstiger Kram). Du findest quasi anhand von dem was davor und/oder dahinter steht, wenn das positiv ist (Fund), kriegst du die URL. Alternative: RegEx Prüfung auf generell gültige URLs.

    //EDIT: Achja und bitte niemals Deklarationen ohne Datentyp, das ist eine unschöne Geschichte.

    Link :thumbup:
    Hello World
    lookbehind/ahead brauch man hier nich, man muss es sich ja nich unnötig schwer machen... er weiß wie der link aussieht. er ist immer gleich, nur ein parameter-wert im query ändert sich. also kann man ganz einfach nach dem ganzen link suchen lassen, danach .*?" das findet dann den rest (in diesem fall den hash) bis der link durch " beendet wird
    Hi,

    nun ja, abgesehen davon dass meine Lösung universell anwendbar ist. Aber bei deiner Methode hast du dann immer noch das Anführungszeichen ("), und das bekommst du so (ohne assertions) auch nur mit einer weiteren Zeile Code weg, indem du ein RegEx-Replace mit Pattern \"$ und Replacement "" machst. Denn das Anführungszeichen brauchst du als "Ankerpunkt" für das "?" in ".*?". Besser noch wäre eh ["'] bzw ("|').

    Link :thumbup:
    Hello World