Script in Taskplanung

  • Hallo,

    hat jmd. eine Idee, warum nachfolgendes simples compiliertes Script

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>

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

    $oIE = _IECreate ("http://192.168.0.241")
    Sleep(2000)
    If WinActive("Gerät(Camera1)") Then
    WinActivate("Gerät(Camera1)")
    Sleep(1000)
    WinSetState("Gerät(Camera1)","",@SW_MAXIMIZE)
    Sleep(1000)
    MouseClick("left",486,305,1,0)
    Sleep(1000)
    Send("username")
    Sleep(1000)
    MouseClick("left",486,347,1,0)
    Sleep(1000)
    Send("passwort")
    Sleep(1000)
    MouseClick("left",358,385,1,0)
    Sleep(1000)
    EndIf

    [/autoit]

    im Taskplaner von Windows XP eingebunden zwar im direkten Modus funktioniert; jedoch nicht bei Ausführung als geplante Task ?
    Also sofort ausführen im Taskplaner geht (ebenso geht es beim Ausführen im WIndows Explorer). Bei geplanter Task kommt die Fehlermeldung : Benutzername ungültig.

    Es handelt sich hierbei nur um einen automatisierten Zugriff mit Username und Passwort auf das Webinterface einer im Netzwerk befindlichen Kamera.
    Die Webseite ist übersät mit Javascript (leider keine bzw. sehr wenig Ahnung hiervon).
    Ich suche schon fast den ganzen Sonntag da wegen des Fehlers; hier im Forum auch schon mal viel durchsucht.

    Wenn weitere Info benötigt wird .. leider habe ich nicht immer Zugriff auf die Kamera.

    merci im voraus.
    Gruss ExBerliner

  • Bei Task anlegen kannst du ein Benutzer auswählen ist dieser richtig geschireben und ein Passwort angegeben? Sowie hat er auch die Rechte dieses durchzuführen? An besten mal unter START + R drücken und compmgmt.msc eingeben und unter Lokale Benutzer und Gruppen unter Benutzer schauen ob der Account existiert und was er für Rechte hat.

    Zum test auch mal die Benutzerkontensteuerung deaktivieren.

    Gruss DevFly

  • Benutzerkontensteuerung unter XP? ;)

    Bist Du in einer Domäne? Domänenname bei Benutzername angegeben?
    Gab es unter XP nicht mal die Möglichkeit beim Task ein Häkchen mit der Option "Interaktion / Datenaustausch mit Desktop zulassen" zu setzen? (Oder war das bei den Diensten? Hab gerade keinen Windows PC zur Hand)


    Da Du mit Fensterbefehlen arbeitest, muss das ganze sichtbar sein und funktioniert nicht, wenn es unsichtbar oder bei gesperrtem Computer ausgeführt wird...

    Gruß Veronesi

  • vielen Dank für die "Denkanstösse".
    Ich werde das alles prüfen ausser der Benutzerkontensteuerung :)
    Komme leider erst spät abends bis nachts dazu und melde mich dann.

    Gruss ExBerliner

  • DevFly
    Deine Infos haben mich dazu bewogen, einfach mal die zeitgesteuerte Aufgabe im Taskplaner zu löschen und neu anzulegen. Ich dachte mir, ich erspare mir dann Deine vorgeschlagenen Überprüfungen. Und siehe da, es funktionierte dann. Aber leider nur 1x , danach dann das selbe Problem:

    Fehlermeldung : Benutzer ungültig. Das diese Meldung kommt ist mir jetzt auch klar. Die Eingabefelder für Benutzername und Passwort wurden nicht gefüllt. (Ich mache das über Teamviewer) ... Hmm ... bin irgendwie ratlos.

    Mir fällt jetzt auf, dass beim ersten mal der dortige Monitor an war, während beim 2. Mal der Monitor ausgeschaltet ist. ??? Kann das denn sein ? Hab zwar schon so einiges erlebt, aber sowas ? Macht es Sinn, den Webseiteninhalt mal zu posten ?
    Mit eingeschaltetem Monitor kann ich morgen erst wieder testen.

    veronesi nein, ich bin in keiner Dömane. [edit] ja, Fenster sind sichtbar. und nein, der Computer ist nicht gesperrt. [/edit]

    Gruss
    Rudi Ratlos alias ExBerliner

    Einmal editiert, zuletzt von ExBerliner (2. August 2011 um 02:10)

  • Also die Grafikkarte kann abfragen, ob ein Monitor dranhängt und auch, ob er eingeschaltet ist!
    Machen nicht alle, grundsätzlich aber möglich!
    Typischerweise machen das vor allem die NVIDIA Grafikkarten mit mehreren digitalen Ausgängen!

    Ich denke mir, dass Windows das auch mitbekommt, wenn der Grafikausgang (temp.) deaktiviert ist, und Deine Fensterbefehle und Mausbefehle schlagen fehl!

    Probier doch das Ganze mal mit immer eingeschaltetem Monitor, das sollte sich schnell finden lassen.
    Gruss Veronesi

  • veronesi

    jau, in Deine Richtung habe ich probiert. Ich habe aber kein Ergebnis, im Gegenteil es ist zum Haare ausraufen.
    Fakt ist, dass über die Energiesparoptionen der Monitor sich ausschaltet. Nun war ich aber mal vor Ort und habe das ganze im Beisein mit anderen Taskzeiten probiert, und zwar immer so, wie die Task nachts um 00:01 den Monitor vorfindet.
    Es ist zum Mäuse melken, es funktioniert immer dann, wenn ich davor sitze (nein, ich bin nicht die Ursache :grins:)

    Habe die Task wieder auf 00:01 Uhr gestellt und vorhin über Teamviewer kontrolliert: Wieder die Meldung "Benutzer ungültig".
    Starte ich das Programm manuell geht es sofort; starte ich es im Taskplaner manuell gehts auch. Es ist total unlogisch das ganze.

    Ich habe mal den Code der Loginseite hier:

    Spoiler anzeigen


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    <link rel="stylesheet" href="style.css" type="text/css">
    <style>
    BODY {
    MARGIN: 0px; BACKGROUND-COLOR: #848284; font: arial;
    }
    </style>
    </head>
    <script language = "javascript">

    function user_onkeypress()
    {
    if (window.event.keyCode==13)
    pwd.focus();
    }
    function pwd_onkeypress()
    {
    if (window.event.keyCode==13)
    monitor_link.focus();
    }
    function set_language(language)
    {
    top.setcookie('language',language,720);
    top.location.reload();//reload index.html
    }
    function monitor()
    {
    top.user=user.value;
    top.pwd=pwd.value;
    top.browser = 0;
    location='monitor.htm';
    }

    </script>

    <body>
    <table border=0 cellpadding=0 cellspacing=0 width=745 bgColor=#ffffff height=500 background=./images/loginbg.JPG align="center">
    <tr height = 80>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=745 align="center">
    <tr height =70>
    <td style="width: 515px" ><font face="Arial" color="#FFFFFF" size="5px">&nbsp;&nbsp;Real-time&nbsp;IP&nbsp;Camera&nbsp;Monitoring&nbsp;System</font></td>
    <td ></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr height = 20>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=745 align="center">
    <tr height = 20>
    <td style="width: 55px"><strong>&nbsp;&nbsp;&nbsp;<font><a id = english href = "javascript:set_language('english');" style="font-size:12px;color:#FF0000;"><script>document.write("English")</script></a></strong></td>
    <td style="width: 50px"><strong>&nbsp;<font><a id = spanish href = "javascript:set_language('spanish');" style="font-size:12px;color:#FF0000;"><script>document.write("Spanish")</script></a></strong></td>
    <td style="width: 50px"><strong>&nbsp;<font><a id = Deutsch href = "javascript:set_language('Deutsch');" style="font-size:12px;color:#FF0000;"><script>document.write("Deutsch")</script></a></strong></td>
    <td style="width: 50px"><strong>&nbsp;<font><a id = french href = "javascript:set_language('french');" style="font-size:12px;color:#FF0000;"><script>document.write("French")</script></a></strong></td>
    <td style="width: 50px"><strong>&nbsp;<font><a id = Italian href = "javascript:set_language('Italian');" style="font-size:12px;color:#FF0000;"><script>document.write("Italian")</script></a></strong></td>

    <td style="width: 50px"><strong>&nbsp;<font><a id = Polski href = "javascript:set_language('Polski');" style="font-size:12px;color:#FF0000;"><script>document.write("Polski")</script></a></strong></td>
    <td style="width: 65px"><strong>&nbsp;<font><a id = simple_chinese href = "javascript:set_language('simple_chinese');" style="font-size:12px;color:#FF0000;"><script>document.write("简体中文")</script></a></strong></td>
    <td style="width: 65px"><strong>&nbsp;<font><a id = traditional_chinese href = "javascript:set_language('traditional_chinese');" style="font-size:12px;color:#FF0000;"><script>document.write("繁体中文")</script></a></strong></td>
    <td style="width: 293px"></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td height =20></td>
    <tr>
    <tr height = 30>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=745 align="center">
    <tr height = 30>
    <td style="width: 60px"><td>
    <td style="font-size:18px; "><strong>&nbsp;&nbsp;&nbsp;&nbsp;<script>document.write(top.str_mode_activex);</script></strong></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr height =120>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=745 align="center">
    <tr height="40">
    <td style="width: 60px;"></td>
    <td style="width: 130px">
    <table border=0 cellpadding=0 cellspacing=0 width=122 height=31 bgColor=#ffffff background=./images/userpwd.jpg align="left">
    <td style="font-size:17px; color:#0000CD; width: 120px;"><strong>&nbsp;&nbsp;<font face="Times New Roman"><script language="javascript">document.write(top.str_user);</script></font></strong></td>
    </table>
    </td>
    <td style="height: 40px"><INPUT id=user name=user maxLength=32 LANGUAGE=javascript onKeyPress="return user_onkeypress()" style="width: 140px"></td>
    </tr>
    <tr height="40">
    <td style="width: 60px"></td>
    <td style="width: 130px">
    <table border=0 cellpadding=0 cellspacing=0 width=122 height=31 bgColor=#ffffff background=./images/userpwd.jpg align="left">
    <td style="font-size:17px; color:#0000CD; width: 120px;"><strong>&nbsp;&nbsp;<font face="Times New Roman"><script language="javascript">document.write(top.str_pwd);</script></font></strong></td>
    </table>
    </td>
    <td><INPUT id=pwd name=pwd type = "password" maxLength=32 LANGUAGE=javascript onKeyPress="return pwd_onkeypress()" style="width: 140px"></td>
    </tr>
    <tr height="40">
    <td style="width: 60px"></td>
    <td >
    <table border=0 cellpadding=0 cellspacing=0 width=93 height=31 bgColor=#ffffff background=./images/button.jpg align=left>
    <td><strong>&nbsp;<font><a id = monitor_link href = "javascript:monitor()" class="f18"><script>document.write(top.str_signin);</script></a></strong></td>
    </table>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td height =10></td>
    <tr>
    <tr height =150 width=745 >
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=745>
    <tr height="40">
    <td width=60></td>
    <td style="font-size:18px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;<script>document.write(top.str_mode_serverpush);</script></strong></td>
    </tr>
    <tr height="40">
    <td width=60></td>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=93 height=31 bgColor=#ffffff background=./images/button.jpg align="left">
    <td><strong>&nbsp;<a href="serverpush.htm" class="f18"><script>document.write(top.str_signin);</script></a></strong></td>
    </table>
    </td>
    </tr>
    <tr>
    <td height =30></td>
    <tr>
    <tr height=20>
    <td width=60></td>
    <td>
    <table border=0 cellpadding=0 cellspacing=0 width=100 height=31 bgColor=#ffffff background=./images/attrion.jpg align="left">
    <td height = 20 style="font-size:12px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;<font face="Times New Roman"><script language="javascript">document.write(top.str_attention);</script></font></strong></td>
    </table>
    </td>
    </tr>
    <tr height=20>
    <td width=60></td>
    <td height = 20 style="font-size:12px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Times New Roman"><script language="javascript">document.write(top.str_attention1);</script></font></strong></td>
    </tr>
    <tr height=20>
    <td width=60></td>
    <td height = 20 style="font-size:12px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Times New Roman"><script language="javascript">document.write(top.str_attention2);</script></font></strong></td>
    </tr>
    </table>
    </td>
    </tr>
    <tr>
    <td height =35></td>
    <tr>
    </table>

    </body>
    </html>

    Vielleicht entdeckt ja jmd. was. Jedenfalls kann ich hier nicht mit "_IEFormGetObjByName" oder ähnliches arbeiten. Nach meinen Kentnissen jedenfalls.

    Ich arbeite mal weiter die nächsten Tage dran (komme nur sporadisch dazu).

    Gruss ExBerliner

    Danke

  • Hallo ExBerliner

    Also, wenn Du den Task manuell ausführst, dann funktioniert es? Dann ist aber der Monitor und das Bild etc. bestimmt alles eingeschaltet, oder?
    Wäre ja nicht gut, wenn es dann schon nicht gehen würde.

    Aber die Frage ist: Wie findet denn der Task den PC / Monitor Nachts um 00:01 vor?
    Wenn dann der Bildschirm ausgeschaltet ist, (oder der PC im Standby oder gesperrt...) dann wird es nicht funktionieren.

    Stelle doch die Zeit des Taskes mal so ein, dass er in den nächsten 5 Minuten startet. Dann wartest Du vor dem laufenden PC / Monitor / ... und achtest darauf, dass der PC/Monitor weder in den Standby, noch sonst was geht.
    Wenn es dann funktioniert, musst Du vermutlich wohl oder übel in den Energiesparoptionen gewisse Dinge ausschalten!

    Oder vielleicht kannst Du mit deinem Programm - vor dem eigentlichen Ablauf - den PC / Monitor etc. "aufwecken"? Natürlich nur, wenn es wirklich daran liegt!

    Gruss Veronesi

  • Vielleicht entdeckt ja jmd. was. Jedenfalls kann ich hier nicht mit "_IEFormGetObjByName" oder ähnliches arbeiten. Nach meinen Kentnissen jedenfalls.

    Also nur anhand des HTML Quellcodes den du da gepostet hast sehe ich kein Problem darin Anstelle von send() und den Window Funktionen komplett auf die IE Funktionen zu setzen. Das löst evtl. das Problem.
    Relevante Stellen für den Login:

    Code
    <INPUT id=user name=user 
    <INPUT id=pwd name=pwd type = "password"
    background=./images/button.jpg

    Die beiden Inputs sollten mit diesen Funktionen ausfüllbar sein:

    [autoit]


    _IEGetObjById()
    ;oder
    _IEGetObjByName()

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

    _IEFormElementSetValue()

    [/autoit]

    Danach kommen dann noch diese Funktionen in Frage:

    [autoit]


    _IEFormSubmit()
    _IEImgClick() ; sofern die button.jpg von oben zum login Button gehören sollte...

    [/autoit]
  • sorry, ich war einige Tage unterwegs.

    veronesi :
    ich habe alles probiert, es ist und bleibt unerklärlich. Bildschirm ist an, aber im Schlaf-Mode, sonst keine weiteren Energiesparoptionen (Festplatte immer an/Monitor off nach 20 Minuten). Starte ich das Programm im Taskplaner direkt, geht es. Verschiebe ich die Task auf eine Startzeit -nach dem der Monitor gerade im Schlafmodus ist- und bleibe dabei, gehts auch. Um 00:01 Uhr gibt es umgebungsmässig keinen Unterschied zum Testumfeld. Im Gegenteil, ich sorge nun auch noch 1 Minute vor der eigentlichen Task dafür, dass der Moni angeht (nur ein mousemove). Ja, ich weiss, einige werden sagen, dass da was unterschiedliches sein muss. Aber es ist definitiv nichts anders, ausser das vorher Acronis eine Sicherung durchführt. Und die ist defenitiv weit vorher zu Ende. Es ist egal welche Startzeit ich einstelle, wenn ich nicht vor Ort bin, gehts nicht. Ich schaue dann immer danach remote und sehe die Fehlermeldung, starte das manuell aus der task heraus und es geht dann. Es sitzt zu diesem Zeitpunkt keiner vor Ort oder stört in irgendeiner anderen Weise (ist so abgesprochen). Schalte ich mich kurz vor der Startzeit remote rauf (Teamviewer, mit und ohne entferntem Mauszeiger darstellen), läuft es. Bin ich nicht drauf geht es nicht, wenn der Monitor im Suspend ist, obwohl ich ihn vorher (1 Min.) "aufwecke". genauso wie ich es beschreibe, ich dreh ab :) also ich habe in diese Richtungen wirklich vieles und "unmögliches" probiert.

    misterspeed :
    vielen dank für die Codeschnipsel. Ich muss mich mit diesen Befehlen erstmal auseinandersetzen und werde es mit diesen Befehlen testen. Ggf. melde ich mich nochmals dazu. Ich meine der "button.jpg" ist nicht der Login-Button. Aber das werde ich sicher im Test dann sehen. Wird etwas dauern, da ich zwischendurch immer mal off bin ...

    [edit: weitere Hinweise nehme ich natürlich gerne auf]

    Gruss ExBerliner

  • Hallo,

    nachdem ich leider andere Projekte vorziehen musste, bin ich bei einem gleichartigen Fehler gestolpert.
    Die Lösung war so simpel wie einfach ..
    Hier nun meine etwas schnell geänderte und funktionierende Variante:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>

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

    $oIE = _IECreate("http://192.168.0.241")
    $oFrames = _IEFrameGetCollection ($oIE)
    $iNumFrames = @extended
    $oFrame = _IEFrameGetCollection ($oIE, 1)
    ;; der folgende Sleep war die Lösung des Problems .. getestet mit XP SP3 und IE8)
    Sleep(3000) ;; damit die Seite vollständig geladen ist ..?? ansonsten kein _IEFormElementSetValue möglich gewesen
    ;; im geposteten Programm bei TE nach _IECreate erforderlich
    $oUser = _IEGetObjById ($oFrame, "user")
    $oPwd = _IEGetObjById ($oFrame, "pwd")
    _IEFormElementSetValue($oUser,"administrator")
    _IEFormElementSetValue($oPwd,"password")
    Sleep(2000) ;; muss nicht unbedingt sein

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

    #cs ;;;; nachfolgender Kram geht nicht
    ;~ _IEFormSubmit($oFrame,0)
    ;~ _IELoadWait($oFrame)

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

    ;~ _IEAction($oFrame,"click")
    ;~ _IEImgClick($oFrame,"button.jpg","name")
    #ce

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

    Opt("WinTitleMatchMode", 2)
    WinSetState("(Camera1)","",@SW_MAXIMIZE)
    Sleep(1000)
    MouseClick("left",358,385,1,0)
    Sleep(1000)
    WinSetState("(Camera1)","",@SW_RESTORE)
    Sleep(1000)
    WinSetState("(Camera1)","",@SW_MINIMIZE)
    ;; nun ist die Camera bereit, um Aufnahmen durch "Bewegungsmeldung" zu machen

    [/autoit]

    Der Befehl "Sleep(3000)" war die Lösung des Problems .. auch nach einem _IECreate(..) war es erforderlich (getestet mit XP Sp3 und IE8).
    Wobei ... ein Sleep(1000) tut es meistens auch, aber eben nicht immer. Mit 3 Sek. bin ich jedenfalls auf der sicheren Seite.
    Verstehen tue ich es nicht, zumal Folgebefehle nach einem _IECreate(..) in der IE.AU3 erst nach einem _IELoadwait(..) abgearbeitet werden ($f_wait = 1).

    Aufgefallen ist es mir bei einem Folgeprojekt mit IE8 und IE9. Als Beispiel soll folgendes kleines Prog dienen:

    Spoiler anzeigen
    [autoit]


    #include <ie.au3>

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

    $iZ=-1
    Do
    $iZ+=1
    If $iZ > 0 Then TrayTip("Wiederholung: ",$iZ,1+16)
    $oIE=_IECreate("http://downloadcenter.trendmicro.com/index.php?clk=tab_pattern&clkval=1&regs=NABU&lang_loc=1",0,0,1,1)
    ;~ _IELoadWait($oIE) ;; bringt nix
    Sleep(1000) ;; Die Webseite wird meistens nicht vollständig (teilweise schon) geladen, wenn man diese Zeile entfernt/kommentiert.
    $text=_IEBodyReadText($oIE)
    _IEQuit($oIE)
    If StringInStr($text,"Enterprise Pattern - Windows") Then ExitLoop ;;; Diesen Eintrag suchte ich
    Until $iZ = 20
    If $iZ <> 20 Then MsgBox(0,"","Wiederholungen: "&$iZ&@CRLF&@CRLF&$text)

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

    Die Webseite wird meistens nicht vollständig geladen, wenn man den Befehl "Sleep(1000)" entfernt.
    Warum das so ist ? Keine Ahnung. Ich bin froh, wie ich solche Probleme künftig lösen kann.

    Vielleicht weiss ja jmd. warum dieses Problem neuerdings besteht ? In der Vergangenheit war hier immer alles okay.

    MfG
    ExBerliner