bestimmten Wert aus einer Webseite auslesen

  • Hallo zusammen,

    Problem/Aufgabe:
    Ich möchte aus eine bestimmten Webseite einen Wert auslesen.

    Das soll nicht mit der Funktion _INetGetSource erfolgen, da es mir in diesem bestimmten Fall nicht hilft.
    Das Script müsste also die Oberfläche direkt irgendwie absuchen. Wenn es hilft, der Wert steht immer an der selben Stelle.

  • Es hilft mir nicht, da sich dieser Wert jede Sekunde ändert. Es ist Countdown, der runter gezählt wird. Format ist SS:MM:ss
    Also Stunden:Minuten:sekunden
    Im Seinten Queltext sieht es dann ungefähr so aus:
    <span class="count" id="singleView_counter_944589426861605">--:--:--</span>

  • Nur als beispiel (habe jetzt mal ne swoopoo auktion genommen - wusste nich woher ich sonst nen countdown bekomme)

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <String.au3>
    SplashTextOn("","Loading...",300,50,-1,-1,1)
    $oIE = _IECreate("about:blank", 0, 0)
    _IENavigate($oIE, "http://www.swoopo.de/auktion/apple-macbook-pro-13-3-mb990d-a-/247743.html")

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Test")
    $Label = GUICtrlCreateLabel("",100,100,100,100)
    GUISetState()
    SplashOff()

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTimer()

    [/autoit] [autoit][/autoit] [autoit]

    $Time = _StringBetween(_IEBodyReadHTML($oIE), "id=""countertime"">", "</div>")
    If Not @error Then
    Return $Time[0]
    Else

    [/autoit] [autoit][/autoit] [autoit]

    $Time = _StringBetween(_IEBodyReadHTML($oIE), 'countertime _extended="true">', "</div>")
    If Not @error Then
    Return $Time[0]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    EndFunc ;==>_GetTimer

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(750)
    GUICtrlSetData($Label, _GetTimer())
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit]

    _IEQuit($oIE)

    [/autoit]
  • Wir kommen der Sachen näher, ich brauche es für Dealstreet.de

    hier mein Code:

    [autoit]

    #include <IE.au3>
    #include <String.au3>
    #include <Inet.au3>
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $auktionszeit ;verbleibene Auktionszeit
    Dim $winctivate ;Fenster aktivieren
    Dim $hWnd
    Dim $oIE
    Dim $aktuelle_URL ;URL die aktuell angezeigt wird

    [/autoit][autoit][/autoit][autoit]

    ;Ein Fenster mit dem Namen "Windows Internet Explotet suchen und aktivieren
    Opt("WinTitleMatchMode", 2)
    $winactivate = WinActivate("Windows Internet Explorer")

    [/autoit][autoit][/autoit][autoit]

    ;Fenster Maximieren
    WinSetState ("Windows Internet Explorer", "", @SW_MAXIMIZE )

    [/autoit][autoit][/autoit][autoit]

    ;Aktuelle Url in Variable schreiben
    $hWnd = WinGetHandle("Internet Explorer")
    $oIE = _IEAttach($hWnd,"HWND")
    $aktuelle_URL = _IEPropertyGet($oIE,"locationurl")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Je nach Auktion muss die Counternummer geändert werden--------------------------------------------------------hier
    ;$auktionszeit = _StringBetween(_INetGetSource($aktuelle_URL), '<span class="count" id="singleView_counter_908589535359579">', '</span>')
    $auktionszeit = _StringBetween(_IEBodyReadHTML($aktuelle_URL), '<span class="count" id="singleView_counter_908589535359579">', '</span>')
    _Arraydisplay($auktionszeit)

    [/autoit]

    Also wenn ich im _StringBetween den _IEBodyReadHTML benutze, dan liefert mir der _Arrydisplay nicht zurück
    Beim _INetGetSource bekomme ich --:--:-- zurück

    2 Mal editiert, zuletzt von bluepython (17. November 2009 um 20:43)

  • Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <String.au3>
    $AuktionURL = InputBox("URL","Bitte gib den Link zur Auktion auf Dealstreet.de ein")

    [/autoit] [autoit][/autoit] [autoit]

    $AuktionArray = StringSplit($AuktionURL,"/") ; Teilt die URL an den "/" auf.
    $Auktion = $AuktionArray[$AuktionArray[0]] ; Das letzte Element in der URL (Autkionsnummer)

    [/autoit] [autoit][/autoit] [autoit]

    SplashTextOn("","Loading...",300,50,-1,-1,1)
    $oIE = _IECreate("about:blank", 0, 1)
    _IENavigate($oIE, $AuktionURL)
    If StringInStr(_IEBodyReadText($oIE),"Laden dieser Website fortsetzen (nicht empfohlen).") Then _IELinkClickByText($oIE,"Laden dieser Website fortsetzen (nicht empfohlen).")
    GUICreate("Test")
    $Label = GUICtrlCreateLabel("",100,100,100,100)
    GUISetState()
    SplashOff()
    ;~ <span class="count" id="singleView_counter_556589335343781">00:00:17</span>

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetTimer()

    [/autoit] [autoit][/autoit] [autoit]

    $Time = _StringBetween(_IEBodyReadHTML($oIE), '_counter_'&$Auktion&'>','</span>')
    If Not @error Then
    Return $Time[0]
    Else
    $Time = _StringBetween(_IEBodyReadHTML($oIE), '_counter_'&$Auktion&'>','</p>')
    If Not @error Then
    Return $Time[0]
    EndIf
    EndIf
    EndFunc ;==>_GetTimer

    [/autoit] [autoit][/autoit] [autoit]

    $LabelInhalt_Alt = ""
    While 1 * Sleep(100)
    $LabelInhalt_Neu = _GetTimer()
    If $LabelInhalt_Neu <> $LabelInhalt_Alt Then
    GUICtrlSetData($Label, $LabelInhalt_Neu)
    $LabelInhalt_Alt = $LabelInhalt_Neu
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    _IEQuit($oIE)

    [/autoit]

    Hab den IE mal sichtbar gelassen, da DealStreet seeeeeeeeeeehr langsam läd, und ich nicht wollte dass du denkst, es würde sich aufhängen ^^

  • HI,
    danke schon mal im Voraus. Ich werde es heute Abend mal testen, mal schauen, ob ich den Counter angezeigt bekomme.

    So habe mal getestet, irgendwo ist noch der Wurm drin. Ich bekomme in dem Fenster nichts angezeigt, könnte es an der Internet Explorer Version liegen? Ich habe den IE 7

    So, ich habe es jetzt so weit am laufen, wenn der Counter eine bestimmte Zeit erreicht, dann habe ich mir eine MsgBox auf blicken lassen.

    Jetzt habe ich nur noch ein Problem:
    Ich will, dass bei erreichen einer bestimmten Zeit des Counters, der Bieten! Button geklickt wird.
    Im Quelltext habe ich leider keine Bilddatei gefunden für den Button sonst hätte ich es dadrüber glöst. Hast du da noch eine Idee, wie man das verwirklichen kann?

    2 Mal editiert, zuletzt von bluepython (18. November 2009 um 21:44)

  • @ Schnitzel:
    Dealstreet.de

    Die Buttons sind eigentlich nur Links, welche aber über JS / AJAX verabeitet werden. Die Funktion um ein Gebot auszuführen ist glaube ich hier drin:
    https://static.dealstreet.de/s/js/custom/au…andler-1.0.1.js

    allerdings kenn ich mir mit JS zu wenig aus um da was brauchbares raus zu bekommen. hab schon alles mit IENavigate versucht...
    "auctionhandler.setbid()", "auctionhandler.setbid(this)","auctionhandler.setbid.click([auktionsnummer]) und so weiter und so fort.. aber es klappt einfach nichts. Wenn sich wer mit JS/Ajax kenntnissen mal da durchkämpfen wil nur zu.. ^^

  • Mit FireFox (FF.au3) kann ich da kein Problem sehen:

    Spoiler anzeigen
    [autoit]

    #region Includes
    #include <FF.au3>
    #endregion Includes

    [/autoit] [autoit][/autoit] [autoit]

    If _FFConnect() Then

    [/autoit] [autoit][/autoit] [autoit]

    $sHref = _FFCmd(".location.href")
    $sID = StringMid($sHref, StringInStr($sHref, "/", 2, -1)+1)
    MsgBox(0,"ID",$sID)

    $sPreis = _FFXpath("//span[@id='singleView_price_" & $sID & "']")
    MsgBox(0,"Preis",$sPreis)

    ; zeit
    $sZeit = _FFXPath("//span[@id='singleView_counter_" & $sID & "']")
    MsgBox(0,"Zeit",$sZeit)

    ; bieten
    ---- zensiert (siehe AGBs) ---
    EndIf

    [/autoit]


    wenn man sich auf der Seite eines bestimmten Artikels befindet.

    [EDIT]
    *hüstel* "Bieten" wieder aus dem Beispiel genommen ...

    Wenn Du den Bietagenten der Seite benutzt (kostet ja nix) dann verstößt Du nicht gegen deren AGBs
    https://www.dealstreet.de/agb

    Zitat

    14.5. Sie dürfen keine Mechanismen, Software oder sonstige Scripts anstelle unseres Bietagenten zum automatisierten Bieten einsetzen

    3 Mal editiert, zuletzt von Stilgar (19. November 2009 um 10:12)