Daten von einer Webseite auslesen

  • Auf den schnellen Blick seh ich nichts, was das verursachen könnte... Am besten startest du es mal in SciTE mit F5 und guckst mal, ob in der Konsole etwas steht.
    Es kann gut sein, dass es abstürzt, wenn etwas beim auslesen der webseite nicht gefunden wird, da du auf Arrayeinträge zugreifst, ohne zu testen, ob sie vorhanden sind...
    (Du nutzt stringregexp... in dem fall, dass ein text nicht gefunden wird wird dort kein Array zurückgegeben. Rufst du dann Dim $a...[...] (Zeile 88+) auf stürzt das Programm ab (OnAutoitExit wird ausgeführt).)

    Was mir aufgefallen ist: Du nutzt Processexists("ieexplorer.exe"). Das ist Fehleranfällig, da es mehrfach vorhanden sein kann,... (Manche Programme nutzen den auch intern uvm.) und manchmal auch mit *32 heißt uvm.
    Sicherer wäre folgendes:

    Damit kannst du dir sicher sein, dass du auch das richtige Fenster überwachst :)

  • Hallo Kanashius,

    ich starte das Script über SciTE mit F5 (wies noch nicht wie man das sonst machen könnte, ist auch noch nicht wichtig).


    Was meinst du mit Konsole? (ist das das Fenster unter den Script?)

    soll ich dir den Text der darin steht mal Posten wenn es abstürzt?


    EDIT[0]:
    das steht dann in der Konsole unter dem Script:

    EDIT[1]:
    ich glaube ich habe verstanden, in dem Fall existiert das Array EAN nicht. !

    das Bedeutet ich muss abfragen ob die Arrey`s überhaupt existieren und wenn nicht ein Dummy einfügen so das das Programm nicht abschmiert.
    Was man beim programmieren alles beachten muss.

    Danke für deine Hilfe, dann mache ich mich mal dran.
    1. das Fenster richtig zu überwachen
    2. die Arrey Prüfen auf Existenz.

    3 Mal editiert, zuletzt von Muecke (20. Oktober 2016 um 16:29)

  • so ich habe nun das Fenster anders abgefragt. und ich habe die Arrey`s noch mal geprüft. jetzt scheint es zu klappen. Danke.

    DANKE.

    das ist der Aktuelle Code:

  • Ja, das meinte ich mir Konsolenausgabe. Aber du brauchst für die zukunft nicht alles Posten. Es reicht:

    Code
    "C:\Users\Muecke\Desktop\AutoIt\Script\WEB-Lesen\Web-test_20_10_16.au3" (83) : ==> Subscript used on non-accessible variable.:
    FileWrite($File, $aDatum & "-" & @hour & ":" & @min & ":" & @sec & ";" & $aHerstellernummer[0] & ";" & $aEAN[0] & ";" & $aLiName[$i] & ";" & $aEK[$i] & ";" & $aURL & @CRLF)
    FileWrite($File, $aDatum & "-" & @hour & ":" & @min & ":" & @sec & ";" & $aHerstellernummer[0] & ";" & $aEAN^ ERROR

    Ja, der Error sagt, dass auf $aEAN nicht mit [] zugegriffen werden kann. Verhindern tut man so etwas normal auf diese Weise:

    AutoIt
    ;@error:
    ;		1: Keine EAN gefunden
    ;		2: ...
    Func _func()
    	;...
    	$aEAN = StringRegExp($sSource, "(?s)<td><strong>EAN</strong></td>\s*<td>(\d+)</td>", 3)
    	if @error then SetError(1,0,-1)
    	;...
    EndFunc

    Da du das direkt mit hotkey aufrufst kannst du so nicht auf den Fehler reagieren, also am besten in deinem Fall etwa so:


    Wenn du hinter dem Stringregexp dir mal die @error ausgeben lässt siehst du auch, was genau für ein Fehler aufgetreten ist (vermutlich ist @error 1 -> Array is invalid. No matches.)

    Wenn du nicht immer Messageboxen für ausgaben nehmen möchtest ist ConsoleWrite("Nachricht"&@crlf) nützlich, damit schreibst du einen Text in das Fenster unten in SciTE ;)

    Wenn dein Programm fertig ist kannst du es compilieren, dann hast du eine ausführbare datei (exe)

    EDIT: Hab grad gesehen, dass du im Fehlerfall weitermachen willst. In dem Fall kannst du einfach das @error statt dem IsArray nehmen.
    Du musst nur aufpassen. Zwischen dem Aufruf der Funktion und dem abfragen des @error darf keine andere Funktion aufgerufen werden, da dann der @error überschrieben wird.


    MfG Kanashius

  • Ja, das Fenster habe ich bisher nicht beachtet, muss ich wohl öfters drauf schauen, :) das bringt mich dann etwas weiter :)

    Ja ich möchte im Fehlerfall weiter machen daher frage ich den Fehler ab bzw. schaue ob ein Arrey existiert und wenn nicht gehe ich davon aus das der Wert nicht vorhanden war, und setze dann ein "# NV #" ein, so kann ich die Daten dennoch in die Datei weiter schreiben, und es Stürzt nicht ab :)


    Jetzt ist mir nur aufgefallen das die Methode um die $Herstellernummer und $aEAN leider auch nicht geht sobald es sich nicht nur um zahlen sondern Zahlen und Buchstaben handelt. dann ist das auch leer :(


    am was könnte das liegen?