@Moombas Danke für deine Antwort.
Beiträge von gmmg
-
-
OK, habe jetzt die folgende Func hinzugefügt und habe nach dem erstellen des Labels die Zeile GUICtrlSetOnEvent(-1, _admin_config) eingefügt.
Wäre das so korrekt oder lässt sich das auch anders lösen?
Func _admin_config()
MsgBox(0,"","test")
EndFuncAutoIt
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) GUICtrlSetOnEvent(-1, _admin_config) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc ; Funktion für den Admin Config Bereich Func _admin_config() MsgBox(0,"","test") EndFunc
Gruß Marcel
-
Hallo Zusammen,
benötige nochmal eure Hilfe. Ich habe der GUI noch ein Label "admin config" hinzugefügt.
Hier komme ich nun nicht weiter, wie ich den Aufruf starte, damit es klick bar ist. Bei einer Switch Endswitch würde ich das im Case zweig machen aber hier?
C
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc
Danke
Gruß Marcel
-
Für mein Script habe ich jetzt in der Function _Start_Connection die folgende Anpassung vorgenommen.
Die Zeile If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" in If $PassWord Then $Connection_String &= ";Jet OLEDB:Database Password=" & $PassWord & ";" geändert.
AutoIt
Alles anzeigenFunc _Start_Connection($DBPath, $UserName = "", $PassWord = "") If Not IsObj($objConnection) Then Return -1 $Connection_String = $sDataProvider & $DBPath & ";" If $UserName Then $Connection_String &= "User ID=" & $UserName & ";" ;If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" If $PassWord Then $Connection_String &= ";Jet OLEDB:Database Password=" & $PassWord & ";" ;$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=123456789" ;$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWord & ";" $objConnection.Open($Connection_String) If @error Then $ConnStatus = "Failed " & @error Return $ConnStatus EndFunc
KR,
Marcel
-
Bitte den Post in die Rubrik "Datenbanken" verschieben.
Danke
-
Hallo Zusammen,
Ich verwende Access UDF ( https://www.autoitscript.com/forum/topic/177556-yet-another-access-udf-but-different-accdb-only) und möchte eine passwortgeschützte „accdb“-Datenbank öffnen. Mit der benutzten Access UDF klappt das im Standard nicht, obwohl mit .
Meine Lösung, ich habe den Connection_String in der Funktion angepasst.
$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWordWie kann ich das nun sauber in die UDF integrieren? Habe im engl. Forum da auch bereits angefragt, da ja sicher andere auch das Problem haben.
AutoIt
Alles anzeigenGlobal $Connection = _Start_Connection($dbname, "", "password") ; mein codeabschnitt im Script ; folgend die Funktion in der access.udf #Region - Function _Start_Connection ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Start_Connection ; Description ...: This function will start or open a new connection. ; Syntax ........: _Start_Connection($DBPath [, $UserName = ""[, $PassWord = ""]]) ; Parameters ....: $DBPath - Path of your Access database file.(with *.accdb extension and a ";" sign at the end") ; $UserName - [optional] Username of your database . Default is "". ; $PassWord - [optional] Password of your database. Default is "". ; Return values .: String. If connection is opneed then, it will be "OK". And if it is failed then, "Failed " & @error ; Author ........: spudw2k. I've made a little change to this function ; Modified ......: 2015 sep ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _Start_Connection(@ScriptDir & "\TestDB.accdb;") ; =============================================================================================================================== Func _Start_Connection($DBPath, $UserName = "", $PassWord = "") If Not IsObj($objConnection) Then Return -1 $Connection_String = $sDataProvider & $DBPath & ";" If $UserName Then $Connection_String &= "User ID=" & $UserName & ";" If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" ; mit dem angepassten String funktioniert das öffnen $Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWord $objConnection.Open($Connection_String) If @error Then $ConnStatus = "Failed " & @error Return $ConnStatus EndFunc #EndRegion
Danke
Gruß Marcel
-
Hallo Sven,
danke für die Hinweise. Ich schau mir das an und gebe zeitnah eine Rückmeldung.
Danke
Gruß Marcel
-
Hallo Sven,
ich habe nochmal eine Frage. Wenn ich das _WD_UpdateDriver nutze, dann dauert es immer einen Moment, bis danach der Browser öffnet.
Hast du da bereits etwas umgesetzt, um den Status / Fortschritt des Updates anzuzeigen? Meine Idee war jetzt, vor und nach dem _WD_UpdateDriver einen TrayTip anzuzeigen, damit der User hier weiß, das noch was passiert.
Danke
Gruß Marcel
-
Hi Code4Fun,
hier mal ein Beispiel aus meinem SQL Script.
AutoIt
Alles anzeigen#include <MSSQL.au3> #include <Array.au3> #include <WindowsConstants.au3> local $oMyError $sserver = "servername" $susername = "user" $spassword = "pass" $sdatabase = "db" $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") $sqlCon = _MSSQL_Con($sserver, $susername, $spassword, $sdatabase) $ergebnis = _MSSQL_Query($sqlCon, "SELECT id, name FROM teilprojekt where projektid = 110 and geloeschtam = 0;") $array = $ergebnis.GetRows If Not IsArray($array) Then MsgBox(0, 'Array', 'kein Ergebnis') Exit EndIf _ArraySort($array, 0, 0, 0, 0) _ArrayDisplay($array) For $i = 1 to UBound($array) -1 ;MsgBox(0,"",$array[$i][0]) ;_MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE, $condition) ;-'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value n' $values = "'26931'" & ",'"&$array[$i][0]&"',100" ;MsgBox(0,"",$values) _MSSQL_AddRecord($sqlCon, "zustaendigkeit", $values) Next _MSSQL_End($sqlCon) Func MyErrFunc() Local $HexNumber $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "COM Error Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1); to check for after this function returns EndFunc ;==>MyErrFunc
Gruß Marcel
-
-
Guten Morgen Sven,
habe es eben getestet, bringt aber den folgenden Fehler.
__WD_Post ==> Javascript Exception [23] : HTTP status = 500
_WD_ExecuteScript ==> Javascript Exception [23] : javascript error: Cannot read properties of null (reading 'shadowRoot')
(Session info: chrome=124.0.6367.119)
+ @error = 0
+ @error = 0
__WD_Post ==> Element interaction issue [14] : HTTP status = 400
_WD_ElementAction ==> Element interaction issue [14] : Parameters: Command=click Option=DefaultGruß Marcel
-
Jetzt wo du das Shadow Root erwähnt hast, habe ich im engl. Forum mal nach Beispielen gesucht und habe das für mein Beispiel um setzten können.
AutoIt$sRoot = _WD_GetShadowRoot($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='usercentrics-root']") $sElement_cookie = _WD_FindElement($sSession, $_WD_LOCATOR_ByCSSSelector, ".sc-dcJsrY.dWLoUN", $sRoot, "", True) MsgBox(0,"", $sElement_cookie) If @error = $_WD_ERROR_Success Then ConsoleWrite("test") _WD_ElementAction($sSession, $sElement_cookie, 'click') Sleep(500) EndIf
Gruß Marcel
-
Hallo Sven,
ja, den xpath hab ich mir per Browser anzeigen lassen.
Bei der ersten Seite würde ich den Cookie Button "Alles Akzeptieren" benötigen.
Den Link schau ich mir mal an
Danke für dein Unterstützung.
Gruß Marcel
-
Hallo SOLVE-SMART,
bei einer Website "https://www.ftigroup-service.de/home" habe ich das Problem, dass ich das Cookie Consents Fenster nicht bestätigen kann.
Hast du da eine Idee?
Hier mal mein Beispiel Code:
AutoIt
Alles anzeigen;accept cookie policy ;Test1 //*[@id="uc-center-container"]/div[2]/div/div[1]/div/button[2] ;Test2 /div/div/div[2]/div/div[2]/div/div[2]/div/div[1]/div/button[2] IF $iWD_Element_cookie <> Null Then ; wenn die variable iWD_Element_cookie einen Wert in der DB hat, führe Schleife aus MsgBox(0,"", $iWD_Element_cookie) Sleep(3000) $sElement_cookie = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='uc-center-container']/div[2]/div/div[1]/div/button[2]") _WD_ElementAction($sSession, $sElement_cookie, "Click") MsgBox(0,"", $sElement_cookie) EndIf
Bei der Lotto-Thüringen habe ich als Beispiel keine Probleme mit dem Cookie Fenster.
AutoIt;Scriptausschnitt: $url = "https://www.lotto-thueringen.de/" $sElement_cookie = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='ccm-widget']/div/div[2]/div[2]/button[2]") MsgBox(0,"", $sElement_cookie) If @error = $_WD_ERROR_Success Then ConsoleWrite("test") _WD_ElementAction($sSession, $sElement_cookie, 'click') Sleep(500) EndIf
Danke
Gruß Marcel
-
Moombas im Script gibt es sicherlich einige Sachen die sich verbessern lassen.
Der nächste Step im Script ist, die Übergabe der Daten an den Chrome Webdriver für den automatischen Login. Logindaten kommen aus der DB.
Die entsprechenden WD_Elemente habe ich bereits in anderen Scripten die ja in diesem einen zusammengefasst werden sollen. Eventuell macht es Sinn die Elemente auch in der DB zu speichern und dann entsprechend auszulesen.
Aber jetzt ist erst mal Wochenende
Gruß Marcel
-
-
Ich frage jetzt in der If Schleife den Button Name ab. Das sollte mir für den Zweck ausreichen.
AutoIt
Alles anzeigenFunc _get_logins() For $i = 1 to UBound($aDataArray) -1 If Not @error Then ;MsgBox(0,"",$sDisplayName) IF $sName = "Button-xyz" Then $String &= $aDataArray[$i][1] & " *** " & $aDataArray[$i][2] & "|" ;String 2 für combobox Else $String &= $aDataArray[$i][0] & "|" ;String 1 für combobox EndIf EndIf Next ;$String = $String ;MsgBox (0,"",$String) EndFunc
-
Hallo Zusammen,
wie kann ich es am Besten lösen, dass wenn ich String 1 oder String 2 für eine Combobox in der Funktion benötige?
Mein Gedanke war jetzt in der DB ein Feld hinzuzufügen und dann mit einen numerischen Wert zu füllen, den ich dann der Funktion übergebe und in einer IF Abfrage nutzen kann.
AutoIt
Alles anzeigenFunc _get_logins() For $i = 1 to UBound($aDataArray) -1 If Not @error Then ;MsgBox(0,"",$sDisplayName) $String &= $aDataArray[$i][0] & "|" ;String 1 für combobox $String &= $aDataArray[$i][1] & " *** " & $aDataArray[$i][2] & "|" ;String 2 für combobox EndIf Next $String = $String ;MsgBox (0,"",$String) EndFunc
Gruß Marcel
-
Moombas Danke für die Antwort. Schau ich mir auch an.
Will aber vorher noch das Auslesen der Daten aus der DB für die zweite GUI einbauen.
Allen schon mal einen schönen Feiertag
Gruß Marcel
-