Unbegreifliches Scriptproblem

  • Hallo!
    Erst einmal.. Ich kenne mich weder mit BASIC, noch mit AutoIt oder sonst einer Programmier- / Scriptsprache aus, deswegen fiel es mir schwer einen passenden Threadtitel für das Problem zu wählen... :S

    Ich habe mir von einem Bekannten ein Script schreiben lassen, das automatisch eine beliebig lange Liste von Links (Liste wird als .txt genutzt, Trennung der einzelnen Links ist per Enter, also neue Zeile) abarbeitet und den Quelltext der Seiten einzeln als .txt in einen beliebigen Ordner speichert.

    Das läuft soweit gut, der Quelltext der ersten 5 Links der insgesamt 762 Links langen Liste wird korrekt gespeichert... Danach werden zwar weiterhin .txt-Files im dafür angegeben Ordner erstellt, in denen steht aber nur noch eine 0.

    Das Script sieht so aus:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <File.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Quellcode Schreiber", 343, 206, 192, 124)

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

    $Group1 = GUICtrlCreateGroup("Speicherpfad", 0, 80, 337, 65)
    $Input1 = GUICtrlCreateInput("Ordner", 8, 96, 297, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Browse", 8, 120, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Group2 = GUICtrlCreateGroup("Liste", 0, 8, 337, 65)
    $Input2 = GUICtrlCreateInput("Datei", 8, 24, 297, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button2 = GUICtrlCreateButton("Browse", 8, 48, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Button3 = GUICtrlCreateButton("In .txt Dateien exportieren", 192, 176, 139, 25, 0)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $File = FileSelectFolder("Ordner, in dem die Dateien gespeichert werden sollen", "")
    GUICtrlSetData($Input1, $File)
    Case $Button2
    $File2 = FileOpenDialog("Datei mit den Links", "", "Text files (*.txt)")
    GUICtrlSetData($Input2, $File2)
    Case $Button3
    Dim $links
    _FileReadToArray($File2, $links)
    $name = ""
    For $i = 1 to $links[0]
    $Objekt = _IECreate($links[$i], 0, 0)
    $HTML = _IEBodyReadHTML($Objekt)
    $name = StringSplit($links[$i], "=", 0)
    FileWrite($File & "\" & $name[2] & ".txt", $HTML)
    Next
    MsgBox(0, "Erfolg", "Der Quellcode wurde erfolgreich in TXT abgespeichert!")
    EndSwitch
    WEnd

    [/autoit]


    Die Linkliste ist in diesem Format als txt abgelegt:

    Es wäre wirklich genial, wenn jemand den Fehler finden könnte, da mein Bekannter jetzt erstmal für 3 Wochen auf Geschäftsreise ist.. :-/

    Freundliche Grüsse
    Dabrax

    4 Mal editiert, zuletzt von Dabrax (4. Dezember 2009 um 12:10)

  • Ich würde mit FileOpen und FileClose arbeiten.

    Ungetestet
    [autoit]

    #cs **************************************************************************

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

    Unbegreifliches Scriptproblem

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

    http://www.autoit.de/index.php?page…4599#post124599

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

    #ce **************************************************************************

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <File.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Quellcode Schreiber", 343, 206, 192, 124)

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

    $Group1 = GUICtrlCreateGroup("Speicherpfad", 0, 80, 337, 65)
    $Input1 = GUICtrlCreateInput("Ordner", 8, 96, 297, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button1 = GUICtrlCreateButton("Browse", 8, 120, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Group2 = GUICtrlCreateGroup("Liste", 0, 8, 337, 65)
    $Input2 = GUICtrlCreateInput("Datei", 8, 24, 297, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
    $Button2 = GUICtrlCreateButton("Browse", 8, 48, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Button3 = GUICtrlCreateButton("In .txt Dateien exportieren", 192, 176, 139, 25, 0)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $File = FileSelectFolder("Ordner, in dem die Dateien gespeichert werden sollen", "")
    GUICtrlSetData($Input1, $File)
    Case $Button2
    $File2 = FileOpenDialog("Datei mit den Links", "", "Text files (*.txt)")
    GUICtrlSetData($Input2, $File2)
    Case $Button3
    Dim $links
    _FileReadToArray($File2, $links)
    $name = ""
    For $i = 1 to $links[0]
    $Objekt = _IECreate($links[$i], 0, 0)
    $HTML = _IEBodyReadHTML($Objekt)
    $name = StringSplit($links[$i], "=", 0)
    $hFile = FileOpen($File & "\" & $name[2] & ".txt", 2)
    FileWrite($hFile, $HTML)
    FileClose($hFile)
    Next
    MsgBox(0, "Erfolg", "Der Quellcode wurde erfolgreich in TXT abgespeichert!")
    EndSwitch
    WEnd

    [/autoit]
  • Ich würde das IE Objekt auch wieder beenden. Er startet für jeden Link then IE neu und irgendwann reicht Dein Hauptspeicher nicht mehr.

    [autoit]


    FileWrite($File & "\" & $name[2] & ".txt", $HTML)
    _IEQuit($Object)

    [/autoit]
  • Vielen Dank für eure schnellen Antworten :)

    Dein Änderungsvorschlag hat funktioniert, funkey, zumindest bis Link 54, ab da waren meine 6gb RAM komplet ausgelastet und ich konnte meinen Computer nochmal mit Müh und Not vor dem Aufknüpfen bewahren. Da würde wohl die Änderung von Water weiterhelfen, aber wo genau füge ich das im Script ein? Wie gesagt, meine Kenntnisse auf dem Gebiet tendieren gegen Null. :wacko: Tut mir leid, dass ich einer der "schwierigeren Kunden" bin! :|

    Einmal editiert, zuletzt von Dabrax (4. Dezember 2009 um 11:40)

  • Man muss auch nicht jede smal ein neues IE-Objekt erstellen, sondern man kann auch _IENavigate verwenden:

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <File.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Quellcode Schreiber", 343, 206, 192, 124)

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

    $Group1 = GUICtrlCreateGroup("Speicherpfad", 0, 80, 337, 65)
    $Input1 = GUICtrlCreateInput("Ordner", 8, 96, 297, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Button1 = GUICtrlCreateButton("Browse", 8, 120, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Group2 = GUICtrlCreateGroup("Liste", 0, 8, 337, 65)
    $Input2 = GUICtrlCreateInput("Datei", 8, 24, 297, 21, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    $Button2 = GUICtrlCreateButton("Browse", 8, 48, 97, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $Button3 = GUICtrlCreateButton("In .txt Dateien exportieren", 192, 176, 139, 25, 0)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $File = FileSelectFolder("Ordner, in dem die Dateien gespeichert werden sollen", "")
    GUICtrlSetData($Input1, $File)
    Case $Button2
    $File2 = FileOpenDialog("Datei mit den Links", "", "Text files (*.txt)")
    GUICtrlSetData($Input2, $File2)
    Case $Button3
    Dim $links
    _FileReadToArray($File2, $links)
    $name = ""
    $Objekt = _IECreate("", 0, 0)
    For $i = 1 To $links[0]
    _IENavigate($Objekt, $links[$i])
    $HTML = _IEBodyReadHTML($Objekt)
    $name = StringSplit($links[$i], "=", 0)
    FileWrite($File & "\" & $name[2] & ".txt", $HTML)
    Next
    _IEQuit($Objekt)
    MsgBox(0, "Erfolg", "Der Quellcode wurde erfolgreich in TXT abgespeichert!")
    EndSwitch
    WEnd

    [/autoit]

    So geht es jedenfalls bei mir. :D

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Perfekt perfekt perfekt! Vielen vielen Dank! Funktioniert einwandfrei! :D
    Wirklich superschnelle Hilfe hier! :)