Dann stimmt mit deiner IE Version oder mit der Website etwas nicht, mein Code sollte funktionieren.
Kollegen zum Geburtstag gratulieren
-
Kloppstock -
28. Dezember 2016 um 09:14 -
Erledigt
-
-
Guten Morgen,
habe es mittlerweile fast geschafft :).
Jetzt habe ich aber beim absenden des Geburtstagsgrußes ein Problem.
Es ist ein Button der standardmäßig auf nicht veröffentlichen steht. Danaben ist ein Pfeil um auszuwählen, dass ich den Eintrag veröffentlichen möchte. Wähle ich den Pfeil und wähle "Veröffentlichen" führt er die Atkion direkt durch. Der Button hat aber keine eindeutige ID oder Namen.
Wie kann ich denk ansprechen? -
Schau mal bei _IEFormElementGetObjByName für "op"
Und bei allen zurückgegebenen Elementen dann _IEFormElementGetValue zum testen, welcher "Speichern und veröffentlichen" ist.
Den dann anklicken -
@Kanashius fast richtig. _IEFormElementGetObjByName returnt aber keine Collection an Objekten sondern nur ein Objekt. Das sieht man schon daran, das man den Index spezifizieren kann.
@Kloppstock nimm _IEGetObjByName($oIE, "op", $iIndex) und versuch für $iIndex mal ein paar Werte einzusetzen, fang mit 1 an und klick drauf.
Wenn es nicht passt nimm eine 2 und probiers nochmal, bis du den gewünschten Index hast.Alternativ kannst du auch die TagNameCollection holen und die iterieren und schauen ob der innerHTML = "Speichern und veröffentlichen" ist.
-
-
Bin mittlerweile fast fertig, aber manchmal (bei jedem 4. Testdurchlauf oder so) bricht er ab und bringt:
Welches Script genau verwendest du jetzt? Es kann sein das das Lesen der Ini-Datei fehlschlägt.
-
Ziemliches gewurschtel eines Anfängers mein Script
Die sleep zeiten sind mit Absicht so hoch, da der Pc teilweise echt lahm ist.
Code
Alles anzeigen#include <IE.au3> _IEErrorNotify(False) Global $S_USERNAME = "Kloppstock" Global $S_PASSWORD = "123" Global $Address = "http://intranet.de/user/login" While Sleep(50 * 1000) Local $aGeburtstage = IniReadSection("Geburtstage.ini", "Geburtstage") For $i = 1 To $aGeburtstage[0][0] $aDate = StringSplit($aGeburtstage[$i][1], " ", 3) $aTime = $aDate[1] $aDate = StringSplit($aDate[0], ".", 3) $aTime = StringSplit($aTime, ":", 3) If @MDAY = $aDate[0] and @MON = $aDate[1] and @HOUR = $aTime[0] and @MIN = $aTime[1] Then Do Local $login = _IECreate ($Address,1,1,1,1) sleep(10000) WinActivate("Anmelden") sleep(10000) Until IsObj($login) Local $oUsername = _IEGetObjById($login, "edit-name") Local $oPassword = _IEGetObjById($login, "edit-pass") Local $oSubmit = _IEGetObjById($login, "edit-submit") _IEFormElementSetValue($oUsername, $S_USERNAME) _IEFormElementSetValue($oPassword, $S_PASSWORD) _IEAction($oSubmit, "click") _IELoadWait($login) Do Global $TitelSeite = _IECreate ("http://intranet.com/node/add/news#edit-intranet",0,1,0,1) sleep(8000) Until IsObj($TitelSeite) Sleep(10000) Send("{Enter}") sleep(800) Send("Geburtstag:") sleep(800) Send("{Space}") sleep(800) Send($aGeburtstage[$i][0]) sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("Herzlichen Glückwunsch zum Geburtstag"&"{!}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{DOWN}") sleep(800) Send("{DOWN}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{Enter}") sleep(800) Send("{TAB}") sleep(800) Send("{DOWN}") sleep(5000) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(800) Send("{TAB}") sleep(2000) Send("{TAB}") sleep(2000) Send("{TAB}") sleep(2000) Send("{Space}") sleep(2000) Send("{TAB}") sleep(2000) Send("{ENTER}") Sleep(10000) Local $logout = _IECreate ("http://intranet.com/user/logout",0,1,0,1) Sleep(10000) Local $aPL = ProcessList("iexplore.exe") For $iCC = 1 To $aPL[0][0] ProcessClose($aPL[$iCC][1]) Next sleep(2000) Opt("WinTitleMatchMode", 2) WinActivate("PowerPoint") EndIf Next WEnd
-
Dann liegt das an der Ini-Datei. Bau eine Schleife drum die so lange läuft bis UBound($aGeburtstage) größer als 0 ist.
-
Sagt das nciht schon die WEnd aller 50 sek?
-
Nein, das lädt nämlich die Ini-Dateien alle 50 Sekunden neu.
Du meintest vorhin das der PC ziemlich langsam sei, also überrascht es mich nicht das das Lesen der Ini-Datei fehlschlägt.Jetzt brauchst du eine Schleife die garantiert das die Ini-Datei richtig eingelesen wird. Bisher wird sie nur eingelesen aber nicht überprüft.
-
Wie mache ich das dann?
-
Na genau wie ich es dir zwei Posts vorher erklärt habe.
-
So? Irgendwie passiert nichts
AutoIt
Alles anzeigenLocal $aGeburtstage = IniReadSection("Geburtstage.ini", "Geburtstage") Sleep(50) While Sleep(500) If UBound($aGeburtstage)>0 Then EndIf WEnd For $i = 1 To $aGeburtstage[0][0] $aDate = StringSplit($aGeburtstage[$i][1], " ", 3) $aTime = $aDate[1] $aDate = StringSplit($aDate[0], ".", 3) $aTime = StringSplit($aTime, ":", 3) If @MDAY = $aDate[0] and @MON = $aDate[1] and @HOUR = $aTime[0] and @MIN = $aTime[1] Then
-
Mit so wenig Code kann ich nicht viel anfangen. Man kann daraus nur ersehen das du die IniReadSection einmal verwendest was ich aber nicht meinte.
-