Hi PSblnkd ,
schaue dir doch gern mal die FAQs bzw. den ersten Punkt "How can I debug my script?" an. Dort findest du von allgemeinen Möglichkeiten zu debuggen, auch Beispiele zu IDEs welche das Debugging per Breakpoints möglich machen. Natürlich könnte man in SciTE dies in die Oberfläche einbauen, doch der darunter liegende Debugger muss eingebunden (oder erst mal implementiert) werden, dass ist erstmal nicht die Funktionalität der IDE (als von SciTE) selbst. So wie BugFix dies auch beschrieb.
Wenn du sofort debuggen möchtest, dann ist meine Empfehlung VSCode mit ein paar wenigen Extensions. Zudem ist genius257 (engli. Forum) dran, die TypeScript Übersetzung für den Debugger (dies braucht VSCode), auszubauen. Im Moment noch im Aufbau, doch einiges geht bereits.
Was du am Ende nutzt ist dir überlassen. Ich möchte nur damit sagen, dass es bereits diverse Möglichkeiten gibt (siehe FAQs und die eben genannte Empfehlung). Daher glaube ich einfach nicht daran, dass bei SciTE sich was in dieser Richtung bewegen wird. Wenn dem so wär, gut für dich 😀 .
==> Wie durch water bereits angemerkt, schreib' einfach Jos an. Wenn er gute Laune hat, schreibt er auch zurück 😅 .
Viele Grüße
Sven
Beiträge von SOLVE-SMART
-
-
Danke BugFix für die Klärung. Falls also das schrittweise Debugging gemeint ist, wie du beschreibst, ja dann hat das nix mit SciTE zu tun.
Naja, ... viele Grüße
Sven -
Das hat nichts mit dem MS-Support zu tun - während beim AutoIt-Programm die Betriebssysteme angegeben werden - auch WinXP, unter denen das Programm läuft, ist das bei SciTE leider nicht der Fall (oder ich hab's noch nicht gefunden).
Wenn eine Programm-Update erfolgt und neue BS-Funktionen benutzt werden, ist das dann klar, daß dieses dann nicht mehr unter den alten BS laufen wird. Darauf sollte aber hingewiesen werden.
"Darauf sollte aber hingewiesen werden." ==> Dazu ist kein Softwarehersteller verpflichtet, wenn es sich um abgekündigte/nicht mehr supportete OS handelt.
Ich hatte ja immer noch gehofft, daß mal eine STEP-Funktion eingebaut wird - so, wie das bei VB(A) üblich ist. Würde den Code-Prozess ungemein erleichtern ...
- Was verstehst du unter "STEP-Funktion"?
- Dazu musst du dich so oder so ans englische Forum wenden, wenn du neue Funktionalität als sinnvoll erachtest.
Ich kann allerdings auch gleich dazu sagen, dass die letzten "Proposals" nie von Jon (Admin & Creator von AutoIt) akzeptiert wurden bzw. bereits bei den Staff- und DEV-Leuten vorher bereits für "unnötig" eingestuft wurden. Dies bedeutet nicht das dein Ansatz ggf. nicht sinnvoll ist oder anderen helfen könnte - es heißt nur das du mit Gegenwind rechnen kannst.
Viele grüße nach Berlin,
Sven -
-
und SciTE läuft nicht unter WinXP!
Darum wird sich sicherlich niemand mehr kümmern. Der Support durch Microsoft für Windows XP ist seit Jahren eingestellt, warum sollte das AutoIt Team dann SciTE noch für WinXP pflegen?
Bei meinem kürzlich erfolgten Download der Version 3.3.16 vom Link im deutschen AutoIt-Forum kam nur die englische Hilfe mit
Ich bin mir nicht sicher, ob wir dies hier schon mal diskutiert hatten im Forum. Ist denn überhaupt die aktuelle Version bereits fertig übersetzt? Ich denke nicht ... daher ggf. auch der "alte" englisch Stand.
Viele Grüße
Sven -
Der Browser soll, nachdem die Anmeldung funktioniert hat, offen bleiben, mit dem Ziel, ganz normal im Browser zu arbeiten.
Okay, dann ist die vorgeschlagene Lösung mehr ein work-around als eine Lösung. Die Browser Automation, was die Handhabe mit WebDriver ist, sieht nicht vor das der Browser-Driver dauerhaft offen bleibt. Die Idee ist Tasks auszuführen und die Session dann wieder zu beenden.
Für deinen Fall ist die Variante gedacht, dass man sich in ein vorhandenes Profil einklingt. Also eine Verbindung zu einer Browser-Session aufbaut, wie im WebDriver Wiki beschrieben (Link im post weiter oben). Dennoch: Am Ende alles nicht schlimm. Du kannst das so lassen, solltest nur ab und an mal deinen %TEMP% Ordner prüfen ob dieser auch wieder aufgeräumt wird oder sich unnötig viel Datenreste dort durch die Chromium (MSEdge) Sessions aufbauen und nicht mehr abräumen.
Ich bilde mir ein, vor einiger Zeit hat das auch mit dem DeleteSession geklappt, aber gut möglich dass ich mich da auch täusche.
Eigentlich nein. Vielleicht hattest du auch noch 'ne ziemliche alte Version, doch auch dies ist ja nun egal.
----------------------
Freue mich das ich behilflich sein konnte. Alles Gute weiterhin mit au3WebDriver Projekt 😀.
Viele Grüße
Sven -
Der Output sieht okay aus. Das der eine Error kommt ist klar, da der XPath falsch ist.
Im folgenden Script mal eine Variante die funktionieren sollte (XPath in Zeile 49), wenn man die entsprechenden Abhängigkeiten des WebDrivers (bzw. des Projektes au3WebDriver) eingebunden/included hat.
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y #include-once #include "wd_helper.au3" #include "wd_core.au3" Global $_WD_DRIVER Global $sDesiredCapabilities $_WD_DEBUG = $_WD_DEBUG_Full Global $url = "https://autoit.de/wcf/login" Global $user = "benutzernamen" Global $password = "Passwort1234" SetupEdge() _WD_Startup() _WD_ConsoleVisible(True) Global $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Navigate($sSession, $url) _WD_LoadWait($sSession, 1500) Sleep(500) Global $sSelector = "//input[@id='username']" _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector) ConsoleWrite("+ @error = " & @error & @CRLF) Global $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector) If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_user, 'value', $user) Sleep(500) EndIf $sSelector = "//input[@id='password']" _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector) ConsoleWrite("+ @error = " & @error & @CRLF) $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $sSelector) If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_user, 'value', $password) Sleep(500) EndIf Global $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@type='submit']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement, 'click') EndIf MsgBox(48, 'Warten', 'Mit okay beendet sich die Session und der WebDriver.') _WD_DeleteSession($sSession) _WD_Shutdown() Exit Func SetupEdge() Local $iPort = _WD_GetFreePort(5555, 5600) If @error Then Return SetError(@error, @extended, 0) _WD_Option('Port', $iPort) _WD_Option('DriverParams', '--port=' & $iPort & ' --verbose --log-path="' & @ScriptDir & '\msedge.log"') _WD_Option('Driver', 'msedgedriver.exe') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _ '"ms:edgeOptions": {"excludeSwitches": ["enable-automation"], ' & _ '"useAutomationExtension": false, "args": ["start-maximized"]}}}}' EndFunc
Ergebnis war das gleiche, der Browser schließt sich wieder.
Alles klar, Danke Chris_ . Und was genau ist nun dein Problem? Willst du das sich der Browser nicht wieder schließt? Denn sobald deine Aktionen durchgeführt sind, also der Beispiel-Login, ist der Ablauf für den WebDriver gelaufen/fertig und dann folgt "Delete existing session" und "Kill the web driver console app".
❓ Ist deine Erwartung das der Browser dann offen bleibt oder wie?
⚠ Falls ja, dann nein so ist es nicht gedacht!
Aber: Du kannst bspw. "_WD_DeleteSession($sSession)" weglassen, richtig. Unsauber aber geht. Du kannst auch bevor das Teardown folgen sollte, eine MsgBox anzeigen lassen (siehe Beispiel-Code diesen Posts hier in Zeile 55) und erst wenn diese bestätigt wird, beendet sich deine WebDriver Automation.Konsequenzen hat das Weglassen von _WD_DeleteSession nicht wirklich. Die Chrome- oder Edge-Daten, welche du für die Session benötigst, werden i.d.R. in TEMP geschrieben und dort kannst du sie entweder selbst wieder löschen oder sie werden bei "korrekten" Abbau der Session (Variante mit der MsgBox) automatisch gelöscht.
-----------------------------------
Ich hoffe dies hilft dir 🤝 .
💡 Du kannst dich allerdings auch in eine bestehende Browser-Sitzung, des normalen Browsers (nicht des Browser-Drivers), in der du deine Tabs hast usw., verbinden.
Siehe dazu FAQ im WebDriver Wiki .Viele Grüße
Sven -
Hi Chris_ , willkommen im Forum hier 👋 ,
stelle doch bitte mal debug full ein $_WD_DEBUG = $_WD_DEBUG_Full in deinem Skript und führe es aus. Dann lass uns den Output der Konsole zukommen und wir können dir ggf. besser/genauer sagen wo dein Problem liegen könnte.
Es ist schon so, dass die Reihenfolge der beiden Funktionen für den Teardown (für das saubere Abräumen der Ressourcen) so ist:
AutoIt_WD_DeleteSession($sSession) ; Delete existing session. _WD_Shutdown() ; Kill the web driver console app.
So ist es u. a. auch in der wd_demo.au3 des Projektes zu sehen.
Also stelle bitte mal so um, dass du dein Fehlverhalten mit MSEdge wieder bekommst und schicke uns den Output.Ich habe dein Skript mal ein klein wenig umgestellt - nix großes - doch es trägt ein wenig zur Übersicht bei:
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y #include-once #include "C:\Store\Repositories\GitHub\autoit-webdriver-boilerplate\lib\au3WebDriver\wd_helper.au3" #include "C:\Store\Repositories\GitHub\autoit-webdriver-boilerplate\lib\au3WebDriver\wd_core.au3" Global $_WD_DRIVER Global $sDesiredCapabilities $_WD_DEBUG = $_WD_DEBUG_Full Global $url = "https://autoit.de/wcf/login/?url=https%3A%2F%2Fautoit.de%2F" Global $user = "benutzernamen" Global $password = "Passwort1234" SetupEdge() _WD_Startup() _WD_ConsoleVisible(True) Global $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Navigate($sSession, $url) _WD_LoadWait($sSession, 1500) Sleep(500) _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='username']") ConsoleWrite("+ @error = " & @error & @CRLF) Global $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='username']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_user, 'value', $user) Sleep(500) EndIf _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='password']") ConsoleWrite("+ @error = " & @error & @CRLF) $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='password']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_user, 'value', $password) Sleep(500) EndIf Global $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='btn_login']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement, 'click') EndIf _WD_DeleteSession($sSession) _WD_Shutdown() Exit Func SetupEdge() Local $iPort = _WD_GetFreePort(5555, 5600) If @error Then Return SetError(@error, @extended, 0) _WD_Option('Port', $iPort) _WD_Option('DriverParams', '--port=' & $iPort & ' --verbose --log-path="' & @ScriptDir & '\msedge.log"') _WD_Option('Driver', 'msedgedriver.exe') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _ '"ms:edgeOptions": {"excludeSwitches": ["enable-automation"], ' & _ '"useAutomationExtension": false, "args": ["start-maximized"]}}}}' EndFunc
Persönlich würde ich es anders strukturieren, doch dies spielt erstmal keine Rolle. Bin gespannt was dein Konsolen-Output sagen wird.
Viele Grüße
Sven -
Hi wuff100 👋 ,
einfacher wäre es, wenn du uns dein Tabellen-Schema (CREATE TABLE Statement) mal zeigst, dann wissen wir wie deine Tabelle aufgebaut ist und können besser antworten. Ich habe dich so verstanden, dass deine Tabelle mindestens die folgenden Spalten hat: ID, Nummer, Ordner.
Somit sieht dein SELECT Statement um nur die ID abzufragen so aus:
Wenn du nun bspw. die ID und den Ordner haben möchtest sieht das Statement so aus:
Und wenn du nur die ID, in Abhängigkeit der Nummer und des Ordners haben möchtest, dann ist das Statement folgendes:
Ich hoffe dies hilft. Das nächste Mal bitte mit dem Tabellen-Schema, dies schließt Missverständnisse (fast) aus 🤝 .
Viele Grüße
Sven -
Mars Danke für dein Statement dazu. Je nach IT-Teilbereich können Papers schon recht hilfreich sein, daher go ahead und viel Erfolg damit.
BugFix Danke auch die für dein Statement. Bei solchen Plattformen (bei den drei oben genannten) gibt es eine breite Community von erfahrenen Entwicklern welche die Artikel auch bewerten/beurteilen und weiter verbreiten. Sodass die von dir beschriebene Gefahr stark reduziert ist. Dennoch ja, ausschließen kann man dies nie.
Allgemein:
Mich interessiert auch nur, ob Blogging Plattformen genutzt werden und warum oder eben nicht.
Das es weitere Weiterbildungsmaßnahmen gibt, welche zusätzlich (oder sogar stattdessen) genutzt werden könnten/sollten, ist mir klar.Danke euch ... mal schauen ob es weitere Meinungen/Einschätzungen gibt 😀 .
Viele Grüße
Sven -
Hi zusammen 👋 ,
mich interessiert:
- Wie ihr euch weiterbildet bzw. über Programmiersprachen, Frameworks und IT-Trends auf dem Laufenden haltet?
- Ob ihr selbst publiziert, Blogs/Artikel schreibt etc.?
Würde mich freuen wenn ihr an der Umfrage teilnehmt.
Danke und weiterhin eine gute Zeit dear community 😊 .Viele Grüße
Sven -
Danke dir MojoeB für die Erläuterung. Verstehe ... .
Ich drücke die Daumen das du bald wieder mit GIT in Berührung kommst, denn es macht die Entwicklung so viel besserer/sicherer in gewisser Hinsicht.Bis später dann.
Viele Grüße
Sven -
Danke sodinoel und danke MojoeB 🤝 .
MojoB: Nutzt du eine Versionsverwaltung wie Git bspw.? Denn was du beschreibst lässt sich mit Git recht einfach vermeiden. Also Änderungen nochmal einsehen und nachvollziehen was ggf. das Problem sein kann. Meist einfacher als sich durch diverse Code-Stellen einzeln durchzudebuggen.
Bald wird es übrigens für VSCode einen richtigen AutoIt-Debugger (javascript based) geben, mit dem man wie in den meisten anderen Sprachen seine Anwendung ordentlich debuggen kann. Die üblichen die wir derzeit haben (direkt mit AutoIt geschrieben), haben mich nie überzeugt um ehrlich zu sein.
Aber dies nur als Randnotiz 😅 .
Viele Grüße
Sven -
wenn du nichts findest, schreit das ja geradezu nach einem Gemeinschaftsprojekt.
Hust, hust 😂 , ... die Hoffnung stirbt zuletzt.
Angenehm Schnuffel dich wieder aktiver hier zu sehen, auch wenn ich es selbst eher wenig bin 😅 .
----------------------
Zur Frage:
Leider nein BugFix , doch einige Vorschläge (links) sehen recht vielversprechend aus.Darf die Software was kosten oder soll sie Freeware sein?
BugFix schrieb zwar "Open Source", doch das heißt nicht automatisch das es kostenfrei, lizenzfrei usw. ist - daher gute Frage Schnuffel.
Ich denke es ist kostenfreie Software unter MIT Lizenz (oder ähnlich) gewünscht, doch das wird uns BugFix sicher noch erläutern.Viele Grüße
Sven -
-
Bin froh das es verständlich gewesen ist. Dennoch kannst du gern diesbzgl. weitere Fragen stellen. Bin im Thema WebDriver recht gut aufgestellt und kann bei Bedarf (wenn es die Zeit hergibt) gern unterstützen.
Viele Grüße
Sven -
In aller Schnelle Schmunke :
2024-09-25-winhttp-vs-au3webdriver.mp3
Kurz Audio, damit ich mir nicht die Finger wund tippe.
Viele Grüße
Sven -
Eine Inputbox habe ich schon getestet, sieht aber echt schlecht aus...
Soll heißen das Design der InputBox gefällt dir nicht oder die InputBox an sich geht nicht?
Vorschlag:
Du lässt den Nutzer das Öffnen des Programms doch sowieso schon mit Parametern zu. Warum dann nicht einen weiteren Parameter der die Option ...eine Bios-Option (Minimal lenght) das Löschen des Biospasswortes verhindert
... deaktiviert. Fertig 😅 .
Viele Grüße
Sven -
Hi Schmunke 👋 ,
ich fürchte da ist einiges durcheinander oder ich muss zumindest einige Rückfragen stellen.
Ich melde mich im Laufe des Tages, jetzt passt es nicht.
Viele Grüße
Sven -
Alles klar 👌 .
Dann mache ich mir nicht die Mühe um den Rest zu beschreiben bzw. zu zeigen, auch gut.
Vielleicht für das nächste Mal, wenn du erneut so'n Fall hast wie dein zweites Szenario. Da ist es nicht nur das Kombinieren von Tabellen und Spalten sondern das Durchlaufen der Daten mit mit einem "Cursor". Damit kannst du Teilergebnisse innerhalb der Loop finden und nutzen, für weitere Queries und diese dann zu einem Gesamtergebnis kummulieren. Also einfach ausgedrückt, eine Schleife, aber in ANSI SQL (was auch Firebird Standard ist), ist dies anders benannt, umständlicher als man es kennt - aber es geht 😅 .
Viele Grüße
Sven