Hallo zusammen,
ich habe Zugriff auf alle Einträge unserer internen Datenbank und möchte die 12000 Objekte in ein Textdokument ausgeben, damit ich bequemer nur die relevanten Objekte in meinem Kundengebiet herausfiltern kann. Ich kann zwar jetzt auch alle Kunden suchen, deren Kundennummern mit 990 beginnen oder der Name Parfümerie enthält, aber ich bräuchte stattdessen die Möglichkeit, alle zu suchen, die z.B. im PLZ Gebiet 11xxx ihren Sitz haben und das gibt die Filterfunktion leider nicht her.
Ich habe ein Skript geschrieben, das alle Objektnummern von 1-12000 durchgehen soll und die entsprechende Webseite öffnet, dort lese ich ein paar Einträge aus dem Formular und schreibe die in eine Textdatei; soweit kein Problem.
Das Problem kommt dann, wenn eine Seite von einem nicht mehr vorhandenen Objekt geöffnet werden soll. Dann bekomme ich neben einer langen Wartezeit mehrfach die Meldungen
--> IE.au3 T3.0-2 Error from function _IEFormElementGetObjByName, $_IESTATUS_InvalidDataType
--> IE.au3 T3.0-2 Error from function _IEFormElementGetValue, $_IESTATUS_InvalidDataType
In dem Fall wird eine übergeordnete Seite geöffnet und der ganze Quellcode dieser Seite ausgelesen. Das will ich natürlich nicht. Bei der nachfolgenden Seite ist im Titel "verwalten" zu lesen; bei den Seiten mit existierenden Objekten steht im Titel "bearbeiten". Ich dachte ursprünglich, dass ich lediglich prüfen müsste, welches der beiden Worte im Titel steht. Das nützt mir aber nix, weil dazu die Seite ohne Objekt vollständig geladen werden müßte.
Meine Frage:
Wie kann ich unmittelbar nach Erhalt einer der beiden Meldungen das Skript dazu bewegen, nicht zu versuchen, die Seite zu öffnen, sondern mit der nächsten Seite weiter zu machen? Das Warten von jeweils etwa 20 Sekunden oder auch länger wenn die übergeordnete Seite geladen wird, muss ich vermeiden.
Spoiler anzeigen
#include <IE.au3>
#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>
#include <WindowsConstants.au3>
#Include <String.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
$objektnummer = 2
For $Schleife = 1 to 2
Local $webseite = "https://webseite.com/object/edit/" & $objektnummer
Local $oIE = _IECreate($webseite)
_IELoadWait($oIE)
Select
Case StringInStr(_IEPropertyGet($oIE, "title"), "bearbeiten") = 0
msgbox(0,"", _IEPropertyGet($oIE, "title") & "-- Titel beinhaltet: NICHT bearbeiten" & StringInStr(_IEPropertyGet($oIE, "title"), "verwalten"))
$objektnummer = $objektnummer+1
_IEQuit($oIE)
Case StringInStr(_IEPropertyGet($oIE, "title"), "bearbeiten") > 0
msgbox(0,"", _IEPropertyGet($oIE, "title") & "-- Titel beinhaltet: SCHON bearbeiten" & StringInStr(_IEPropertyGet($oIE, "title"), "bearbeiten"))
$objektnummer = $objektnummer+1
Local $webseite = "https://webseite.com/object/edit/" & $objektnummer
Local $oIE = _IECreate($webseite)
_IELoadWait($oIE)
Local $sHTMLSeite = _IEBodyReadHTML($oIE)
Local $file = FileOpen("c:\Daten\ergebnis.txt", 1)
; Prüfen, ob Datei im Schreibmodus geöffnet ist
If $file = -1 Then
MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
Exit
EndIf
;~ Ab hier werden die Daten ausgelesen
Local $objektplz = _IEFormElementGetObjByName($oForm, "object_address_zip")
Local $objektstadt = _IEFormElementGetObjByName($oForm, "object_address_city")
...
EndSelect
Next