Suche Hilfe zur Automatisierung

  • Servus,

    Ich habe Schwierigkeiten mit der Komplettstruktur meines Programms zum Auslesen von einzelnen Daten einer dynamischen Website
    Da alles im endeffekt nur ein ellenlanger Batch ist, bei dem ich oft zurück springen muss, nachdem er mit einer Seite fertig ist, würde mein Bot ohne Hilfe Anderer mit Sicherheit um die 1000 Codezeilen benötigen XD....T.T
    Der Tipp von SEuBo, StringRegExp zu nutzen, hat mir dabei bereits sehr weiter geholfen und mir viel Arbeit erspart ^^

    Zum Verständniss, hier der Link der Website (https://autoit.de/www.offtek.de) und eine grobe Erläuterung dazu, wie das Programm in etwa ablaufen sollte.

    Gesucht ist in etwa folgendes:

    -Öffne WebBrowser > https://autoit.de/www.offtek.de > Laptop Speicher

    -Suche (Marke)Acer > Enter Unterordner1
    -Check ob unterordner2 besteht > wenn ja > Enter Acer Unterordner2
    -Check...
    -Check ob unterordner"X" besteht > wenn nicht = ausleden & kopieren der Infos in Excel-Tabelle

    -Zurück > Unterordner"X"
    -Enter > nächstes Modul > Copy infos
    -...

    -Zurück > ...
    -Zurück > Unterordner0
    -Suche (nächste Marke) > Enter
    -Check ob.....

    ...usw...

    Das muss alle Unterordner und Unterordner der Unterordner finden und daraus die nötigen Infos in die Excel Tabelle kopieren. Allerding gibt es einige Marken-Module, die z.B. nur "einen" oder "zwei" Unterordner haben.
    Insgesammt sind es über 50 Marken-Module mit jeweils bis zu über 100 Unterordnern und Modulen. Daher weiß ich nicht wie ich all diese Bedingungen so klein wie möglich verpacken soll.

    Die Excel-Tabelle soll während der Durchführung automatisch miterstellt werden, da es nicht immer die gleiche Anzahl Module ist.
    Hier ein Bsp. wie es ungefähr aussehen könnte:

    http://www.bilder-space.de/show_img.php?…g&size=original

    Kann mir daher jemand evtl. ein gutes Skript empfehlen, welches mir zeigt, wie ich das Programm am effektivsten aufbauen kann?

    Vielen Dank im Vorraus ;)

    MFG Botaner

    Edit BugFix: Hab mal deinen Thread-Titel geändert, 'Botverwirklichung' war äußerst unglücklich gewählt. ;)

    Wer nichts sinnvolles beizutragen hat - sollte lieber die Finger still halten. :thumbdown:

    2 Mal editiert, zuletzt von noXQses (9. März 2010 um 13:15)

  • Bots werden hier eig. nicht unterstützt, da gibts ein anderes Forum, dessen link ich aber nicht posten werde (Werbung???) gib bei google Autoit und Bot ein

    Allerdings würde ich sagen, dass man sich hiermit keinen Spielvorteil verschafft darum vll. erlaubt...


    Zur Excel-tabelle:

    du willst das am ende so ausgeben?

    dan würde ich dir empfehlen, es zuerst in einen Array zu schreiben und dann zu übertragen
    ist leichter zu editieren

  • Vorerst einmal entschuldigt bitte das Wort, dass ich in Zukunft nicht mehr mit meinen Plänen in Verbindung bringen werde.^^

    Der Doppelpost kam zu Stande, da ich einiges an Infos bekommen habe, welche meine Suche nun ein wenig spezifizieren lassen.

    Das mit Array ist bereits auch klar geworden, werde es dann einfach daraus weiter kopieren.

    Ein Zugriff auf die Datenbank ist nach einem kurzen Gespräch leider vom Benutzer nicht erlaubt worden, weshalb ich nun die Möglichkeit habe alles per stgr+c > stgr+v herauszukopieren oder meinem Chef zu sagen, dass er es selbst machen darf X(

    Ob die Betreiber der Website davon nun begeistert sind oder nicht ist zudem unerheblich, da es nicht verboten ist, sich informationen abzuschreiben.

    Um hier also nicht noch mehr Platz mit Recht oder nicht zu vergeuden, bitte ich nun alle die um Hilfe, die sich mit der Materie gut auskennen und evtl. Spaß daran haben mir ein wenig mit der Planung unter die Arme zu greifen :D

    Wer nichts sinnvolles beizutragen hat - sollte lieber die Finger still halten. :thumbdown:

  • soooooo..

    Dank der Hilfe von SEuBo ist das Projekt nun schon um einiges vorran gekommen.

    So sieht es momentan aus:

    Spoiler anzeigen

    Dennoch ist es bisher noch nicht gelungen, das Programm ohne MsgBox "Else" fehlerfrei durchlaufen zu lassen. Nach etwa 3-5 Minuten kommt die erste und lässt man es weiterlaufen, in unterschiedlichen Zeitabständen immer wieder. Teste in diesem Moment was passiert wenn ich es bis zum ende durchlaufen lasse.

    Findet jemand einen Fehler oder hat einen Verbesserungsvorschlag, dann bitte posten ;)

    Wer nichts sinnvolles beizutragen hat - sollte lieber die Finger still halten. :thumbdown:

  • Bitteschön, so sollte es laufen.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <Excel.au3>
    HotKeySet("{ESC}", "_Exit")

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

    $sSource = __InetGetSource("http://www.offtek.de/laptopmemory.php?maincat=1&stid=1")
    $aManufact = StringRegExp($sSource, "(?<=href=')(\QModelType.php?stid=1&manu=\E([\w/-]+))", 3)
    If @error Then Exit
    ;~ _ArrayDisplay($aManufact)
    Global $aExcel[1][9] = [["Speichermodul", "Modulgröße", "Produkt-Kode", "Herst.-Kode", "Spezifikationen", "Marke", "Lagerstatus", "Garantie", "Preis"]]
    For $m = 0 To UBound($aManufact) - 1 Step 2
    ConsoleWrite("+>===================================================================" & @CRLF)
    TrayTip($aManufact[$m + 1], "Wir sind beim nächsten Hersteller!", 10)
    $sSource = __InetGetSource("http://www.offtek.de/" & $aManufact[$m])
    $aTyp = StringRegExp($sSource, "(?<=modeltype=).+?(?='>)", 3)
    If @error Then ContinueLoop
    ;~ _ArrayDisplay($aTyp)
    For $t = 0 To UBound($aTyp) - 1
    TrayTip($aManufact[$m + 1], "Modeltype: " & $aTyp[$t], 3)
    If Not StringInStr($aTyp[$t], "&model=") Then
    $sSource = __InetGetSource("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t])
    $aModel = StringRegExp($sSource, "model=([^']+)", 3)
    If @error Then ContinueLoop
    For $mo = 0 To UBound($aModel) - 1
    $sSource = __InetGetSource("http://www.offtek.de/ModelData.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t] & "&model=" & $aModel[$mo])
    $aTitle = StringRegExp($sSource, 'class="titlebar">Speichermodule f.r (.+)</td>', 3)
    $aData = StringRegExp($sSource, "(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>a href='[^>]+>(.+?)</a>)(?>.+?returnValue"">([^<]+))(?>.+?returnValue""> ?([^<]+))(?>.+?returnValue"">([^<]+))(?>.+?(\d+,\d+) ?&euro)", 4)
    For $x = 0 To UBound($aData) - 1
    _AddModul($aTitle[0], $aData[$x])
    Next
    ;~ _ArrayDisplay($aExcel)
    ConsoleWrite("http://www.offtek.de/ModelData.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=" & $aTyp[$t] & "&model=" & $aModel[$mo] & @CRLF)
    Next
    Else
    $sSource = __InetGetSource("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=0&model=" & $aTyp[$t])
    $aTitle = StringRegExp($sSource, 'class="titlebar">Speichermodule f.r (.+)</td>', 3)
    $aData = StringRegExp($sSource, "(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>middle'>([^<]+)).+?(?>a href='[^>]+>(.+?)</a>)(?>.+?returnValue"">([^<]+))(?>.+?returnValue""> ?([^<]+))(?>.+?returnValue"">([^<]+))(?>.+?(\d+,\d+) ?&euro)", 4)
    For $x = 0 To UBound($aData) - 1
    _AddModul($aTitle[0], $aData[$x])
    Next
    ConsoleWrite("http://www.offtek.de/ModelSelect.php?stid=1&manu=" & $aManufact[$m] & "&modeltype=0&model=" & $aTyp[$t] & @CRLF)
    EndIf
    ConsoleWrite(@CRLF)
    Next
    ConsoleWrite("+>===================================================================" & @CRLF)
    ConsoleWrite(@CRLF & @CRLF)
    Next

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

    _ArrayDisplay($aExcel)
    $oExcelObj = _ExcelBookNew()
    _ExcelWriteSheetFromArray($oExcelObj, $aExcel)
    _ExcelBookClose($oExcelObj)

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

    Func __InetGetSource($s_URL)
    Local $sString = InetRead($s_URL)
    Local $nError = @error, $nExtended = @extended
    Return SetError($nError, $nExtended, BinaryToString($sString))
    EndFunc ;==>__InetGetSource

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

    Func _AddModul($sName, $aArray)
    $iUbound = UBound($aExcel)
    ReDim $aExcel[$iUbound + 1][9]
    $aExcel[$iUbound][0] = $sName
    For $i = 1 To UBound($aArray) - 1
    $aExcel[$iUbound][$i] = $aArray[$i]
    Next
    EndFunc ;==>_AddModul

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]
  • Sodale,

    denke hiermit kann ich das Thema endlich abhaken. Bin nun seit 7 Uhr am testen und es wird wohl auch noch einige Stunden dauern.

    Falls doch noch etwas sein sollte schreibe ich es natürlich nochmal rein, hoffe aber nicht ;)

    Noch einmal ganz herzlichen Dank.

    MfG

    Botaner

    Wer nichts sinnvolles beizutragen hat - sollte lieber die Finger still halten. :thumbdown: