Link finden, der eine bestimmte class hat

  • Hallo,

    ich möchte in einer Webseite einen link finden, der eine bestimmte Klasse hat. Die Seite hat einige Links, aber eben nur einen der class="xxx" hat und genau den möchte ich finden.
    In der Seite steht also etwas wie

    PHP
    <a href="www.linknachirgendwo.tld" class="weiter">weiter</a>

    Nun suche ich aus den vielen Links genau den, der diese Klasse hat.

    Natürlich lasse ich die Seite von meinem Script im IE öffnen und mit

    [autoit]

    $oLinks = _IELinkGetCollection($oIE1)

    [/autoit]

    kann ich mir alle Links holen, aber irgendwie komme ich nicht an die Klasse. Im DOM ist doch className ein Attribut des HTMLLinkElement, aber ich komme nicht dran :(


    Mein Ansatz war die Collection mit einer FOR-Schleife zu durchlaufen (For $oLink in $oLinks) und dann die Klassen der einzelnen $oLink zu testen. Aber mit $oLink.class geht es nicht, mit $oLink.className nicht und auch mit _IEPropertyGet($oLink, "class") oder _IEPropertyGet($oLink, "className") will es nicht :(


    Jemand eine Idee?


    Viele Grüße
    Harry.Fox

  • Also du könntest theoretisch den gesamten Quellcode der Seite herunterladen und mit Hilfe der "StringSplit"-Funktion oder der "StringInStr"-Funktion den Quellcode auf Vorhandensein von "class="weiter"" prüfen.

    Von der gefunden Position aus kannst du dann den Bereich in dem sich der eigentliche Link befindet zurückrechnen. Da muss man eben etwas filtern und splitten.

  • BugFix : Das war die Antwort, die ich befürchtet hatte. Das es mit RegEx gehen müsste dachte ich mir, aber das gehört zu den Dingen, die ich nie wirklich verstanden habe. Ich werde mich mal dransetzen, aber falls ich nicht weiter komme, darf ich sicher nochmal fragen, oder?

    Gruß
    Harry.Fox

  • OK, ich hab's versucht. Und eigentlich dachte ich, dass ich es endlich verstanden hätte, aber es klappt nicht wirklich.

    Also, das ist mein Codeschnipsel:

    [autoit]

    $Quelltext = _IEBodyReadHTML($oIE1)$Pattern = '<a.*?class="next_page".*?href="(.*?)".*?>'
    $NextPageLink = StringRegExp($Quelltext, $Pattern, 2)

    [/autoit]

    Mein $NextPageLink-Array hat - wie erwartet - zwei Einträge, aber der erste sieht so aus:

    Code
    [0]|<a class="prev_page" style="visibility: hidden; cursor: pointer;" onclick="return prevPageClick();" href="/64914512-alastor-vom-risiko-4-monate-zuvor"><img width="26" height="26" title="previous page" align="absmiddle vertical-align=" class="imgHover" style="padding-right: 3px;" alt="Vorherige Seite" src="http://a.wattpad.com/image/pageprev.png?v=de79ba5" border="0" text-top"=""></a> <input class="paging_input" style="width: 25px; font-size: 12px;" size="1" value="1"> of 3<a class="next_page" style="visibility: visible; cursor: pointer;" onclick="return nextPageClick();" href="/64914512-alastor-vom-risiko-4-monate-zuvor/page/2">


    Der zweite hat dann zwar tatsächlich den URL, den ich suche...

    Code
    [1]|/64914512-alastor-vom-risiko-4-monate-zuvor/page/2


    ... aber ich bin nicht sicher, ob das Glück ist, denn eigentlich enthält der erste Eintrag deutlich mehr als ich erwartet hätte. Was ist falsch?


    Gruß
    Harry.Fox

    • Offizieller Beitrag

    Somit hast du dann den vollständigen Link.


    Du brauchst das End-Tag-Zeichen nicht im Pattern. Über "<a" ist garantiert, dass ein Link-Tag abgefragt wird, Die class wird explizit genannt und das Ergebnis wird gecaptured. Somit ist alles, was nach dem Capture kommt nicht mehr erforderlich für den Match. ;)