grundsätzliche Fragen zu Browser

  • Hallo zusammen,

    da ich mich noch nie mit AutoIT beschäftigt habe, wollte ich mal fragen, welche Herangehensweise ihr in meinem Fall wählen würdet.

    Ich möchte zu bestimmten Zeiten die aktuelle Uhrzeit angesagt bekommen. Mit den internen Sprachmodulen von Windows 10 erhalte ich keine zufriedenstellende Ergebnisse. Sie klingen mir einfach zu roboterhaft. Also habe ich nach der Suche im Internet hier eine html

    Datei gefunden, die mir nach Anklicken des Links die aktuelle Uhrzeit mitteilt. Wenn ich im Browser das automatische Abspielen von Audiodateien aktiviere, kommt die Ansage schon beim Öffnen der html-Seite.

    Ich habe versucht, über Batch, Powersell und VBS ein Skript zum Starten des Browsers zu erstellen. Dann über den Taskplaner die definierten Zeiten um das Script zu starten. Das geht 3, 4 mal gut, aber dann wird der Browser nicht sauber beendet(....unerwartet beendet).

    Wenn ich jetzt mit AutoIT ein ganz einfaches Script teste,

    Code
    ShellExecute("C:\Uhrzeit\Waterfox\Waterfox.exe", "file:///C:/Uhr/talk.html")
    Sleep (6000)
    ProcessClose ("waterfox.exe")

    bekomme ich das gleiche Ergebnis. Es funktioniert eine Zeit lang und dann kommt eine Fehlermeldung. Als Browser habe ich Waterfox Portable gewählt, um von meinem Standardbrowser (Firefox) getrennt zu sein. Da ich dort viele Addons und viele Tabs parallel geöffnet habe. Oder gar nicht benutze. Ich habe auch schon versucht den Browser über IDs zu beenden. Die scheinen sich nach jeden Neustart ständig zu ändern. Ich bin für jede Hilfe dankbar.


    Viele Grüße

    Raleigh

  • Hi,

    die "Webseite", verwendet gespeicherte Audiodateien, die einfach nur abgespielt werden. Die sind als Base64 in js-Dateien gespeichert.

    Ich würde also ein Script schreiben, dass das ganze extrahiert und wieder als Audiodateien speichert, mit https://www.autoitscript.com/forum/topic/19…ode-extra-fast/

    Danach kannst du selbst den Code schreiben, der die passenden Dateien zur aktuellen Uhrzeit raussucht und mit SoundPlay den Sound abspielen.

    Dann brauchst du keine Browser.

  • falls du noch einer Lösung suchts dann teste mal das :

    Also entpacke einfach den gesagtem Inhalt in den Skript Verzeichnis so das talk.html im selben Verzeichnis liegt dort wo dein Skript liegt, dann schreibe diesen Code in dein Script es öffnet den MS Edge Browser kannst auch auf Firefox umschreiben mit dem

    Code
    ('args', 'guest') 

    wird kein User geladen also auch keine Addos und es ist auch unabhängig von deinen anderen offnen Browser Instanzen, da es über den Webdriver läuft. Wird der Webdriver ordnungsgemäß beendet wird dann wird auch die browsersession geschlossen.


    'Ich möchte zu bestimmten Zeiten die aktuelle Uhrzeit angesagt bekommen.'

    das könntest du auf mehrere arten lösen, reicht dort eine zeit nach dem Start also ein intervall dann kannst du statt wie in meinem beispiel mit hotkey durch

    die Function AdlibRegister ersetzen.

    oder ist hier eine ganz genaue zeit gemeint ?

    edit^^:

    entschuldige die *au3 Dateien findest du hier : Release 1.0.3 · Danp2/au3WebDriver · GitHub

    7 Mal editiert, zuletzt von MojoeB (8. Juli 2023 um 20:15) aus folgendem Grund: nochmal etwas ergänzt.

  • Vielen Dank, euch beiden. Ich schau mir beides mal genauer an.

    Mein erster Ansatz als Unwissender ist dieser:


    Da die "@SW_MINIMIZE" Funktion nicht zuverlässig funktionierte, habe den Edge Browser über eine Verknüpfung, die ich dann minimiert eingestellt hatte, im Script eingetragen. Dann die Aufgabenplanung für die Startzeiten eingerichtet.

    Die bestimmten Ansagezeiten lauten beispielsweise 12:28, 12:58, dann weiter jede 30 Minuten. Zusätzlich noch die Uhrzeit 15:43 Uhr.


    Viele Grüße

    Raleigh

    Einmal editiert, zuletzt von Raleigh (9. Juli 2023 um 23:25)

  • Die bestimmten Ansagezeiten lauten beispielsweise 12:28, 12:58, dann weiter jede 30 Minuten. Zusätzlich noch die Uhrzeit 15:43 Uhr.

    also nach start alle 30 min bis 15:43? oder wie?

    hier habe mein Beispiel nochmal geändert, da siehst du wie man ohne den Start Parameter das Fenster kontrollieren kannst.

    Das hier ausklammern :

    _WD_CapabilitiesAdd('args', '--headless') ; Füge die Capability "args" mit dem Wert "--headless" hinzu, um den Browser im Headless-Modus zu starten

    ansonsten habe dir zum testen hotkeys eingebaut da kannste sehen das show, hide, max, min kein Problem sind.

    Edit habe grad gesehen das ich vergessen habe die session zu löschen '_WD_DeleteSession($oSession)'

    gehört noch rein

    Einmal editiert, zuletzt von MojoeB (10. Juli 2023 um 00:20)

  • Zitat von MojoeB

    also nach start alle 30 min bis 15:43? oder wie?

    Wenn ich den PC einschalte, egal zu welcher Uhrzeit, möchte ich alle 30 Minuten die Zeit angesagt bekommen. Aber festgelegt auf ..:28 Uhr, ..:58 Uhr, .:28 Uhr ...........

    Zusätzlich als eigene Ansage noch die Uhrzeit 15:43 Uhr. Das die Ansage im Hintergrund stattfindet wäre auch schön, weil das beim konzentrierten Schauen auf den Monitor nur stören würde.

    Ich habe die 6 Dateien(usertesting.au3, wd_capabilities.au3, wd_cdp.au3, wd_core.au3, wd_demo.au3, wd_helper.au3) aus der au3WebDriver-1.0.3 in den Include Ordner(C:\Program Files (x86)\AutoIt3\Include) kopiert. Wenn ich dann beide Scripte teste kommt die Fehlermeldung:


    Wie du oben schon geschrieben hast, liegen die Scripte zusammen mit der talk.html und die dazu gehörenden Dateien in einem Ordner.


    Viele Grüße

    Raleigh

  • Prüfe bitte ob die angegebene JSON.au3 ebenfalls in dem entsprechenden Ordner liegt.

    Diese wird von der wd_core.au3 benötigt., es könnten danach noch weitere folgen.

  • Raleigh


    oh das hab ich bei mir nicht gemerkt da ich die json schon auf dem pc hatte hier findest du die json.au3 : A Non-Strict JSON UDF (JSMN) - AutoIt Example Scripts - AutoIt Forums (autoitscript.com)


    Info für dich wenn du startetes mit : _WD_CapabilitiesAdd('args', '--headless')

    dann sagt er sofort beim Start die Uhrzeit an, dann funktionieren aber die hide/show/max/mini Funktionen nicht mehr.

    Wenn du ohne : _WD_CapabilitiesAdd('args', '--headless')

    startest dann sagt er es nicht an. dann müsstest du am start noch mal die funktion uhrzeit_ansagen aufrufen.

    Einmal editiert, zuletzt von MojoeB (10. Juli 2023 um 16:46)

  • Zitat von von Moombas


    Prüfe bitte ob die angegebene JSON.au3 ebenfalls in dem entsprechenden Ordner liegt. Diese wird von der wd_core.au3 benötigt., es könnten danach noch weitere folgen.

    Die wd_core.au3, WinHttpConstants.au3 und die WinHttp.au3 fehlten bei mir noch. Danke für die Info.


    @MojoeB

    Ich danke Dir nochmals für Deine große Mühe. Irgendetwas stimmt bei mir immer noch nicht. Ich bekomme eine neue Fehlermeldung. Über Suchmaschine bin ich leider nicht schlauer geworden.


    Viele Grüße

    Raleigh

  • hm... von wo hast du deine WinHttp.au3 ?

    eigentlich ist das nur eine Funktion der die Version Nummer von winhttp.au3 zurückgibt.

    (in winhttp.au3)

    zeile *2401

    Code
    Func __WinHttpVer()
    
    Return "1.6.4.1"
    
    EndFunc

    lad dir am besten die 1.6.4.1 runter und füge Sie deinem Includes Ordner hinzu.

    Dann sollte es hoffentlich gehen.

    eben mal geschaut : Releases · dragana-r/autoit-winhttp (github.com)

    2 Mal editiert, zuletzt von MojoeB (10. Juli 2023 um 19:47)

  • Jetzt nachdem ich die WinHttp.au3 getauscht habe läuft das Script einwandfrei. :klatschen: Nochmals vielen Dank. Selber hätte ich das so nie hinbekommen.

    Ich trau mich gar nicht zu fragen. :whistling: Ist der Aufwand sehr groß das Script noch so anzupassen, dass egal wann ich das Script starte, immer die Uhrzeitangabe ..:28 Uhr bzw. ..:58(alle 30Minuten) stattfindet? Jetzt ist es ja so das nach starten des Sriptes dann alle 30 Minuten die Ansage stattfindet. Ich weiß ich hab deine Geduld arg strapaziert. Ansonsten achte ich dann beim starten des Scriptes selber drauf. Ich bin ja froh überhaupt so weit mit deiner Hilfe gekommen zu sein.


    Viele Grüße

    Raleigh

  • Foilgendes ist ungeprüft:

    Variante 1 (einfügen vor dem Adlibregister und start() danach entfernen):

    AutoIt
    start()
    While 1
        sleep(1000); prüfen 1mal je Sekunde sollte reichen, sonst reduzieren
        If (StringSplit(_NowTime(), ':')[2] = '28') or _ ; prüfen ob 28 oder 58 min. erreicht wurden (einmalig)
           (StringSplit(_NowTime(), ':')[2] = '58') Then ;danach wäre Adlibregister mit alle 30minuten autom. immer auf 28/58 min.
            Uhr_ansagen();führe Uhr_ansagen aus 
            ExitLoop
        EndIf    
    WEnd

    Variante 2 (anstatt Adlib register und nach start() einfügen):

    Einmal editiert, zuletzt von Moombas (13. Juli 2023 um 08:23)

  • Für meinen Einsatzzweck habe ich mich ja für die Variante mit -Headless entschieden. Leider musste ich doch feststellen das, wenn die Global $endtime = '14:30:00' Abfrage stattfindet, sich das Script beendet. Also, wenn ich das Script starte kommt die erste Zeitansage. Wenn dann die erste festgelegte Uhrzeit eintritt findet die nächste Ansage statt. Auch die 30 Minuten später wird angesagt.

    Wenn aber zwischen diesen Ansagen die Global $endtime = '14:30:00' Abfrage stattfindet, beendet sich das Script. Also immer wenn die Global $endtime = '14:30:00' abgefragt wird. Wäre es vielleicht auch sinnvoll die Hotkey Funktionen rauszunehmen?

    Da ich die Funktion nicht brauche kann man so das Script klein halten.


    Moombas

    Deswegen wundert es mich nicht, das wenn ich Variante 1 starte sich das Script nach der ersten festgelegten Ansage beendet.

    Bei Variante 2 bekomme ich gar keine Ansage. Ich setze mal die bearbeiteten Scripte nochmal hier rein. Da habe ich bestimmt auch was falsch verstanden.


    2 Mal editiert, zuletzt von Raleigh (11. Juli 2023 um 20:00)

  • Moombas

    Cool ;) deine Variante habe ich auch noch nie so in den Code geschrieben, muss ich mir mal aneignen.

    Ich versteh nicht warum AdlibRegister in die Mitte ?

    WER LESEN KANN IST KLAR IM VORTEIL ^^ sry jetzt erst gecheckt.

    Raleigh

    Du kannst es einfacher machen ich teste es grad, natürlich mit anderen Zeiten.

    So nun geändert :

    6 Mal editiert, zuletzt von MojoeB (11. Juli 2023 um 23:18)

  • Ich hab eine schlechte Nachricht. Sobald die festgelegte Uhrzeit(15:43 Uhr) abgefragt wird, beendet sich das Script immer noch. Im Taskmanager sind der Webdriver und die 6 Edge Tasks dann beendet worden.

    Es gibt aber auch eine positive Nachricht. Wenn ich die Zeile "$end = 1"(Zeile 22) lösche funktioniert die Abfrage für die festgelegte Zeit und auch die 30 Minutenabfrage. Nur der Webdriver und die 6 Edge Tasks laufen im Tasmanager weiter. Auch wenn ich das Script manuell schließe. Ich häng das Script so wie es bei mir läuft nochmal hier rein.

  • natürlich beendet sich das Skript dann

    Es funktioniert so wie ich es verstanden habe.

    wie möchtest du das Skript den beenden, wenn es kein Befehl dafür geben würde?

    In diesem fall bau dir ESC oder etwas anderes als HOTKEY ein damit du das Skript auch beenden kannst, das Skript braucht die anweißung Session und Webdriver zu schließen, ohne das bleibt das natürlich im Taskmgr.

    so in deinem beispiel ist

    $endtime = '22:08:00' = Uhrzeit ansagen + BEENDEN

    was willst du den abfrage $endzeit eigentlich erreichen?

    Entweder soll es weiterlaufen oder beendet werden es macht für mich kein sinn was du da angemerkt hast. Aber ist ja nicht schlimm.

    Code
    HotKeySet("{ESC}", "beenden");(kannst natürlich eine eigne Tastenkombi raussuchen) um das Skript händisch zu beenden.
    
    
    Func beenden()
    _WD_DeleteSession($oSession)
    _WD_Shutdown()
    ConsoleWrite('Script wurde Erfolgreich beendet.' & @CRLF)
    Exit
    EndFunc ;==>beenden


    dann kannst Zeilen 22, 21, 16 bis 14 löschen & natürlich, Global $end = 0 kannste auch löschen.

  • Hier mal dein Script leicht abgeänder und ich sehe das wie Mojo bzgl. beenden (Änderungen: Siehe Kommentare):

  • Moin,

    hier mal meine Idee zur Kernschleife, weil das Skript nur diese eine Aufgabe hat ohne AdlibRegister(). Anstelle der Funktionen aus der Date,au3 werden die Zeit-Makros genutzt.

  • Dann muss ich mich wohl falsch ausgedrükt haben. ?( Das Script soll so lange die 30 Minuten Abfrage stellen, so lang der PC auch eingeschaltet ist. Die festgelegte Uhrzeit(bsw. 15:43 Uhr) findet einmal statt und danach soll natürlich auch die 30 Minuten Abfrage weiterhin stattfinden.

    Das letzte Script mit Hotkey von @Moombas erfüllt jetzt alle Vorgaben. Die festgellegte Zeit, die 30 Minuten Abfragen und die Hotkey Funktion funktionieren. Wenn ich dann der Meinung bin doch die Abfragen zu beenden, brauch ich ja nur per Hotkey das Script beenden. So erfüllt das Script alle meine Wünsche. Es gibt also keinen Grund mehr eure Geduld weiterhin zu strapazieren. Daher nochmals einen großen Dank an alle.


    Viele Grüße

    Raleigh