Guten Morgen,
bin ein Neuling mit AutoIt und habe gleich mal ein Problem....
Ein Script soll den IE fernsteuern, und zwar in der Weise, dass der IE aufgerufen, ein Login-Formular ausgefüllt und abgeschickt und der IE wieder beendet wird.
Das klappt soweit auch auch wunderbar.
Der Haken an der Sache: Das Script wird aus einem php-script heraus aufgerufen, das wiederum sebst aus dem Taskplaner gestartet wird.
Wenn ich das AutoIt-Script direkt auf dem Rechner ausführe, läuft es tadellos durch, wenn es vom Taskplaner gestartet wird, bleibt es hängen.
(Benutzer ist derselbe, Rechte stimmen usw). Das Script startet, ruft auch den IE auf, bleibt aber dann hängen.
Ich füge den Sourcecode mal hier ein (den habe ich aus der Hilfe übernommen uns ausgebaut...):
[autoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ie.au3>
;Erstellt eine Instanz (neues Fenster) des InternetExplorers und gibt ein entsprechendes Objekt zurück.
$oIE = _IECreate ("http://www.example.com",0,0)
;Prüfen ob ein Objekt erzeugt wurde
If IsObj($oIE) Then
;warten bis die Seite komplett geladen wurde
_IELoadWait($oIE)
;Erzeugen eines HTML-Formular-Objekts mit Hilfe des Formularnamens
$oForm = _IEFormGetObjByName($oIE, "login")
;Erzeugen eines Formularfeld-Objekts mit Hilfe des Feldnames
$oUsername = _IEFormElementGetObjByName($oForm, "userId")
;Setzen des Formularfeldinhalts
_IEFormElementSetValue($oUsername, "username")
;Erzeugen eines Formularfeld-Objekts mit Hilfe des Feldnames
$oPasswd = _IEFormElementGetObjByName($oForm, "password")
;Setzen des Formularfeldinhalts
_IEFormElementSetValue($oPasswd, "geheim")
;Absenden des Formulars
_IEFormSubmit($oForm)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$Text = _IEBodyReadText($oIE)
[/autoit][autoit][/autoit][autoit]if StringInStr($Text, "User in use") Then
[/autoit][autoit][/autoit][autoit]$oForm = _IEFormGetObjByName($oIE, "login")
$oPasswd = _IEFormElementGetObjByName($oForm, "password")
;Setzen des Formularfeldinhalts
_IEFormElementSetValue($oPasswd, "geheim")
;Absenden des Formulars
_IEFormSubmit($oForm)
_IELoadWait($oIE)
EndIf
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Local $i = 1
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]$oIE1 = _IEAttach("", "instance", $i)
[/autoit][autoit][/autoit][autoit];*******************************************************************
; ******bis hierher läuft das Script, dann bleibts hängen
;*******************************************************************
If @error = $_IEStatus_NoMatch Then
ExitLoop
EndIf
;Frameset laden
[/autoit][autoit][/autoit][autoit]Local $oFrames = _IEFrameGetCollection($oIE1)
Local $iNumFrames = @extended
local $iFehler = @error
If $iNumFrames > 0 Then
For $j = 0 To ($iNumFrames - 1)
Local $oFramex = _IEFrameGetCollection($oIE1, $j)
Next
$oFrame = _IEFrameGetObjByName ($oIE1, "rviewer")
[/autoit][autoit][/autoit][autoit]if IsObj($oFrame) Then
[/autoit][autoit][/autoit][autoit]$f = _IEBodyReadHTML($oFrame)
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$sMyString = "Logoff"
$oLinks = _IELinkGetCollection($oFrame)
For $oLink in $oLinks
$sLinkText = _IEPropertyGet($oLink, "innerText")
If StringInStr($sLinkText, $sMyString) Then
[/autoit][autoit][/autoit][autoit]_IEAction($oLink, "click")
[/autoit][autoit][/autoit][autoit]ExitLoop
EndIf
Next
EndIf
[/autoit][autoit][/autoit][autoit]EndIf
[/autoit][autoit][/autoit][autoit]$i += 1
[/autoit][autoit][/autoit][autoit]WEnd
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Local $aIE[1]
$aIE[0] = 0
Local $k = 1
While 1
$oIE2 = _IEAttach("", "instance", $k)
If @error = $_IEStatus_NoMatch Then ExitLoop
_IEQuit($oIE2)
$k += 1
WEnd
EndIf
[/autoit]An der markierten Stelle ist Schluss...
Hat irgendjemand einen Tip für mich, woran das liegen könnte?
Jede Hilfe ist willkommen!
Grüße
Safe T. First