1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. gmmg

Beiträge von gmmg

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 20:05

    Ihr seit super :)

    schau ich mir dann morgen genauer an.

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 15:33

    Ich habe jetzt mal mit dem Beispiel von Moombas getestet und habe festgestellt, wenn man in der DB weitere Einträge hinzufügt, gibt es einen Fehler mit der Array Dimension. :( Da ist scheinbar noch ein für das Array definierter Wert zu klein.

    Mit dem Bereitgestellten von AspirinJunkie gibt es auf den ersten Blick kein Problem.

    Hier ist meine Frage, wie kann ich den gelb markierten Abstand um das markierte vergrößern?

    grafik.png


    AutoIt
    #AutoIt3Wrapper_UseX64=y
    
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <D:\Scripte\MS_AccessCom\Access UDF\Access_UDF.au3>
    
    
    ; zum leichteren Zugriff auf die Attribute im URL-Array
    Global Enum $eID, $eName, $eURL, $eGUI
    Global $dbname, $tblname001
    
    ;--------- MSAccess DB ------------
    $dbname = @ScriptDir & "\Data.accdb"
    
    $tblname001 = "Websites"
    
    Global $Connection = _Start_Connection($dbname & ";")
    
    Global  $aURLArray = _Get_Records("SELECT * FROM " & $tblname001 & " Order By ID ASC " & ";"); ;Order By Sortierung ASC
    
    _Close_Connection()
    
    IF _ArrayMax($aURLArray, 0, 1) = "" Then
    
    	Exit
    Else
    	;MsgBox(0,"1",$URL_Array[1][0])
    EndIf
    
    
    ; 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  = 140, _                         ; Breite eines Buttons
    $iButtonHeight = 25, _                          ; Höhe eines Buttons
    $iButtonXStep  = 15, _                          ; horizontaler Abstand der Buttons
    $iButtonYStep  = 15, _                          ; vertikaler Abstand der Buttons
    $iGUIWidth     = $iButtonXStep + $iCols * ($iButtonWidth + $iButtonXStep), _ ; Breite des GUI
    $iGUIHeight    = $iButtonYStep + $iRows * ($iButtonHeight + $iButtonYStep)   ; Höhe des GUI
    
    ; das GUI erstellen
    Opt("GUIOnEventMode", 1)
    $GUI = GUICreate("Website AutoLogin  " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, _raus)
    
    ; 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 = $iButtonXStep + $iPosX * ($iButtonWidth + $iButtonXStep)
    	$iButtonY = $iButtonYStep + $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
    Alles anzeigen
  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 14:46

    AspirinJunkie und Moombas ,

    danke für eure Beispiele. Beide Versionen gefallen mir gut.

    Praktisch muss ich mich jetzt entscheiden :)

    Mir fehlt jetzt noch die Umsetzung, wenn ich auf den Button drücke, soll abgefragt werden, ob bei GUI ein 0 oder 1 steht.

    Wenn 1 dann soll eine 2 Gui erstellt werden mit einem Dropdown und weiteren Daten aus der DB.

    Das erstellen der 2. GUI sollte aber nicht das Problem sein, das habe ich ja in den bestehen Scripten.

    Beispiel:

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 13:44

    Moombas ich war zu langsam, hatte meinen obigen Post nochmal editiert.

    Also eigentlich müsste ich einmal das $URL_Array in ein zweites mit den Feldern bereinigt wegschreiben und dieses dann für die Button nutzen.

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 13:33

    schau mal bitte den Screenshot vom Array #Post8 an.

    Die Werte stehen da aus der DB im Array drin.

    Hier möchte ich bei Col1 und Row 1 beginnen.

    Da ich anhand der ID dann weitere Werte aus einer 2 Tabelle benötige, wäre die Frage ob man für die Buttons einfach ein bereinigtes Array erstellt.

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 13:15

    wenn ich col und row bei 2 beginnen lasse stimmt in der GUI die xy Einteilung der Button nicht mehr. Sollte man eventuell die Daten aus dem Array in ein zweites schreiben, was dann nur die Spalte Name enthält?


    grafik.png

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 13:08

    Hab noch das Problem, dass das Script mit Row 0 anfängt die Button zu erzeugen und auch mit der Spalte ID, die ich nicht möchte.

    grafik.png

    AutoIt
    Opt('MustDeclareVars', 1)
    #AutoIt3Wrapper_UseX64=y
    
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <D:\Scripte\MS_AccessCom\Access UDF\Access_UDF.au3>
    
    Global $URL_Array_pos, $dbname, $tblname001
    Global $msg, $GUI1, $Button1[1] = [0]
    Global Const $2DArrayWithButtonData[3][3] = [['R1B1','R1B2','R1B3'],['R2B1','R2B2','R2B3'], ['R3B1','R3B2','R3B3']] ; Texte
    Global $2DArrayWithButtonLink[9][2]    = [['', 'www.autoit.de'], ['', 'www.heise.de'], ['', 'www.Google.de'], ['', 'www.Google.de'], ['', 'www.Google.de'], ['', 'www.Google.de'], ['', 'www.Google.de'], ['', 'www.Google.de'], ['', 'www.Google.de']]
    
    ;--------- MSAccess DB ------------
    $dbname = @ScriptDir & "\Data.accdb"
    
    $tblname001 = "Websites"
    
    Local $Connection = _Start_Connection($dbname & ";")
    
    Local $URL_Array = _Get_Records("SELECT * FROM " & $tblname001 & " ;")
    
    _Close_Connection()
    
    IF _ArrayMax($URL_Array, 0, 1) = "" Then
    
    	Exit
    Else
    	;MsgBox(0,"1",$URL_Array[1][0])
    EndIf
    
    _ArrayDisplay($URL_Array)
    
    
    _GUI_1_Create()
    
    While 1
    	$msg = GUIGetMsg()
    	Switch $msg
    
    		Case $GUI_EVENT_MINIMIZE
    
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case 1 To $Button1[$Button1[0]]
    			;Shellexecute($2DArrayWithButtonLink[_ArraySearch($2DArrayWithButtonLink, $msg)][1])
    	EndSwitch
    WEnd
    
    
    Func _GUI_1_Create()
    
    	Local $ID, $Counter = 0
    	Local Const $BWidth  = 130
    	Local Const $BHeight = 25
    	;Local Const $iCols = Ubound($2DArrayWithButtonData, $UBOUND_COLUMNS)
    	Local Const $iCols = Ubound($URL_Array, $UBOUND_COLUMNS)
    	MsgBox(0,"",$iCols)
    	;Local Const $iRows = Ubound($2DArrayWithButtonData, $UBOUND_ROWS)
    	Local Const $iRows = Ubound($URL_Array, $UBOUND_ROWS)
    	MsgBox(0,"",$iRows)
    	Local Const $aCols = [2, 30, 140]
    	Local Const $aRows = [2, 30,  40]
    	$GUI1 = GUICreate("Website AutoLogin  " & FileGetVersion(@ScriptName), 474, 257)
    	#Region ### Create Button dynamisch
    
    	For $Col = 1 to $iCols
    		For $Row = 1 to $iRows
    			;$ID = GUICtrlCreateButton($2DArrayWithButtonData[$Row - 1][$Col - 1], $aCols[1] + (($Col-1)*$aCols[2]), $aRows[1] + (($Row-1)*$aRows[2]), $BWidth, $BHeight)
    			$ID = GUICtrlCreateButton($URL_Array[$Row - 1][$Col - 1], $aCols[1] + (($Col-1)*$aCols[2]), $aRows[1] + (($Row-1)*$aRows[2]), $BWidth, $BHeight)
    			_ArrayAdd($Button1, $ID, $Button1[0])
    			;$2DArrayWithButtonLink[$Counter][0] = $ID
    			$Counter += 1
    		Next
    	Next
    	$Button1[1] = UBound($Button1) - 1
    	;_ArrayDisplay($Button1)
    	;_ArrayDisplay($2DArrayWithButtonLink)
    
    	#EndRegion ### Create Button
    	GUISetState(@SW_SHOW)
    
    EndFunc
    Alles anzeigen

    Danke

    Gruß Marcel

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 12:52

    Moombas sieht nicht schlecht aus, die Links sollen nicht direkt geöffnet werden, sondern an den Webdriver für einen Autologin übergeben werden.

    Die Texte und URL + Zugangsdaten sollen aus einer DB kommen. Das sollte sich aber dementsprechend anpassen lassen.

    Danke

    Gruß Marcel

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 12:16

    Danke, schau ich mir später mal an :)

  • GUI - dynamische Button mit Daten aus DB erstellen

    • gmmg
    • 29. April 2024 um 10:37

    Hallo Zusammen,

    ich sitze aktuell an einem Projekt, in dem es darum geht, unsere einzelnen Autologin Scripte (per Webdriver) in eine GUI zu bündeln.

    Nun habe ich aus vorherigen Scripten folgenden Quellcode erstellt. Die Daten dazu kommen aktuell aus einer DB, im Beispiel mal eine MS Access.

    Lässt sich der Bereich der Erstellung der dyn. Button schöner umsetzen?

    Ein Besonderheit gibt es noch, wenn in Col3 (GUI) = 1 steht, soll vorher noch eine zweite GUI erstellt werden mit einem Dropdown Menü, da es bei verschiedenen Webseiten mehr wie 1 Zugang, also pro Agenturnummer gibt, aber das wäre erst der nächste Schritt.



    AutoIt
    #AutoIt3Wrapper_UseX64=y
    
    
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <D:\Scripte\MS_AccessCom\Access UDF\Access_UDF.au3>
    
    local $URL_Array_pos
    
    ;--------- MSAccess DB ------------
    $dbname = @ScriptDir & "\Data.accdb"
    
    $tblname001 = "Websites"
    
    Local $Connection = _Start_Connection($dbname & ";")
    
    Local $URL_Array = _Get_Records("SELECT * FROM " & $tblname001 & " ;")
    
    _Close_Connection()
    
    IF _ArrayMax($URL_Array, 0, 1) = "" Then
    
    	Exit
    Else
    	;MsgBox(0,"1",$DB_Array[1][0])
    EndIf
    
    _ArrayDisplay($URL_Array)
    
    ;~ For $i = 1 To UBound($URL_Array) -1
    ;~ 	MsgBox(0,"",$URL_Array[$i][1])
    ;~ Next
    
    $GUI = GUICreate("Website AutoLogin  " & FileGetVersion(@ScriptName), 474, 257)
    
    GUISetState(@SW_SHOW)
    
    #Region ### Create Button dynamisch
    
    $iCols = UBound($URL_Array)
    ;definiere dyn. Button
    Local $Button[$iCols]
    
    $Btn_Start = GUICtrlCreateDummy()
    ;MsgBox(0,"",$Btn_Start)
    
    For $t = 1 to UBound($URL_Array) -1
    	;-----------------------------------------------------------------
    	; Button1
    	IF $t = 1 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 30, 30, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B1 = 1
    	EndIf
    	; Button2
    	IF $t = 2 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 170, 30, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B2 = 1
    	EndIf
    	; Button3
    	IF $t = 3 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 310, 30, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B3 = 1
    	EndIf
    	;-----------------------------------------------------------------
    	; Button4
    	IF $t = 4 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 30, 70, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B4 = 1
    	EndIf
    	; Button5
    	IF $t = 5 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 170, 70, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B5 = 1
    	EndIf
    	; Button6
    	IF $t = 6 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 310, 70, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B6 = 1
    	EndIf
    	;-----------------------------------------------------------------
    	; Button7
    	IF $t = 7 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 30, 110, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B7 = 1
    	EndIf
    	; Button8
    	IF $t = 8 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 170, 110, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B8 = 1
    	EndIf
    	; Button9
    	IF $t = 9 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 310, 110, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B9 = 1
    	EndIf
    	;-----------------------------------------------------------------
    	; Button10
    	IF $t = 10 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 30, 150, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B10 = 1
    	EndIf
    	; Button11
    	IF $t = 11 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 170, 150, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B11 = 1
    	EndIf
    	; Button12
    	IF $t = 12 Then
    		$Button[$t] = GUICtrlCreateButton($URL_Array[$t][1], 310, 150, 130, 25)
    		GUICtrlSetCursor($Button[$t], 0)
    		$B12 = 1
    	EndIf
    	;-----------------------------------------------------------------
    Next
    ;_ArrayDisplay($Button)
    
    $Btn_End = GUICtrlCreateDummy()
    ;MsgBox(0,"",$Btn_End)
    #EndRegion ### Create Button
    GUISetState(@SW_SHOW)
    
    While 1
    	$msg = GUIGetMsg()
    	Switch $msg
    
    		Case $GUI_EVENT_MINIMIZE
    
    		Case $GUI_EVENT_CLOSE
    			Exit
    			Case $Btn_Start To $Btn_End
    				;MsgBox(0, "Test", GUICtrlRead($Msg))
    				IF GUICtrlRead($Msg) = "Autoit" Then
    					_search()
    					;MsgBox(0,"Array Position",$URL_Array_pos)
    					MsgBox(0,"URL",$URL_Array[$URL_Array_pos][2])
    
    				EndIf
    
    				IF GUICtrlRead($Msg) = "Heise" Then
    					_search()
    					;MsgBox(0,"Array Position",$URL_Array_pos)
    					MsgBox(0,"URL",$URL_Array[$URL_Array_pos][2])
    
    				EndIf
    
    				IF GUICtrlRead($Msg) = "Test1" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test2" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test3" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test4" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test5" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test6" Then _search()
    
    				IF GUICtrlRead($Msg) = "Test7" Then _search()
    
    	EndSwitch
    WEnd
    
    Func _search()
    
    	$URL_Array_pos = _ArraySearch($URL_Array, GUICtrlRead($Msg),  0, 0, 0, 0, 1, 1)
    	;MsgBox(0,"Array Position",$URL_Array_pos)
    
    EndFunc
    Alles anzeigen

    grafik.png


    Danke und viele Grüße

    Marcel

  • Label ausdrucken

    • gmmg
    • 29. April 2024 um 09:37

    Wenn es um mein Beispiel geht, da wird das entsprechende Logo vom Auftraggeber Portal übergeben.

    Wenn sich das Logo nicht ändert, kann das natürlich auch gleich Vorlage rein.

    Gruß gmmg

  • Mit Autoit eine BIOS Option ändern?

    • gmmg
    • 25. April 2024 um 13:04

    Hallo hipfzwirgel hast du dir bereits das BIOS Configuration Utility Tool von HP angesehen?

    https://ftp.hp.com/pub/caps-softpaq/cmit/whitepapers/BIOS_Configuration_Utility_User_Guide.pdf

    Seite 17, gibt ein Hinweis auf das Fastboot.

    Gruß Marcel

  • Label ausdrucken

    • gmmg
    • 24. April 2024 um 10:31

    Hallo Zusammen,

    wir haben früher so was ähnliches benutzt, um Verrechnungsschecks zu drucken.

    Das vorgehen war so:

    - Word Vorlage/Template erstellt

    - Daten per Autoit aus einer DB auslesen

    - Daten per Autoit Word.au3 in die Word Vorlage geschrieben und entsprechend nach Schecknummer gedruckt und gespeichert.

    folgend mal das alte Script.

    AutoIt
    #include <Word.au3>
    #include <Date.au3>
    #include <array.au3>
    #include "mysql.au3"
    
    Local $hFile, $vData, $sFileName, $sData, $hQuery, $aRow, $sMsg, $sSQliteDll
    Local $number_xx,$sString
    
    ; MYSQL starten, DLL im PATH (enthält auch @ScriptDir), sont Pfad zur DLL angeben. DLL muss libmysql.dll heißen.
    _MySQL_InitLibrary()
    If @error Then Exit MsgBox(0, '', "")
    ;; MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version()&@CRLF& _MySQL_Get_Client_Info())
    
    $MysqlConn = _MySQL_Init()
    
    
    $connected = _MySQL_Real_Connect($MysqlConn, "server", "user", "pass", "db_scheckdaten")
    If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))
    $errno = _MySQL_errno($MysqlConn)
    	;;MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    	If $errno = $CR_UNKNOWN_HOST Then
    	;; MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
    Endif
    
    
    $query = "SELECT date,answerd FROM tab_dnis WHERE time = '14:00'"
    _MySQL_Real_Query($MysqlConn, $query)
    
    $res = _MySQL_Store_Result($MysqlConn)
    
    
    ;MsgBox(0, '', "Zugriff Methode 3 - alles in ein 2D Array")
    ;$array = _MySQL_Fetch_Result_StringArray($res)
    ;_ArrayDisplay($array)
    
    $rows = _MySQL_Num_Rows($res)
    $fields = _MySQL_Num_Fields($res)
    ;; MsgBox(0, '', "Zugriff Methode 1- Handarbeit")
    Dim $array[$rows][$fields]
    For $k = 1 To $rows
    	$mysqlrow = _MySQL_Fetch_Row($res,$fields)
    
    	$lenthsStruct = _MySQL_Fetch_Lengths($res)
    
    	For $i = 1 To $fields
    		$length = DllStructGetData($lenthsStruct, 1, $i)
    		$fieldPtr = DllStructGetData($mysqlrow, 1, $i)
    		$data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
    		$array[$k - 1][$i - 1] = $data
    	Next
    Next
    ;; _ArrayDisplay($array)
    
    _WertzuWort($array[1][1] & $array[2][1] )
    
    
    ; Verbindung beenden
    _MySQL_Close($MysqlConn)
    ; MYSQL beenden
    _MySQL_EndLibrary()
    
    
    
    $Logo = "pfad + schecklogo.JPG"
    
    $Scheckempf = ""
    $Scheckaus = "xyz GmbH Straße, plz stadt"
    
    $Bankinstitut = "Bank Name"
    $BLZ = "647477567567"
    $Betragw = '***' & $sString & '**'
    $Betragz = "100"
    $Schecknr = "000001"
    $Kto= "567567657567"
    
    $oWordApp = ObjCreate("Word.Application")
    $oWordApp.visible = 1
    $odoc = _WordDocOpen($oWordApp, "pfad+ vorlage.doc")
    
    
    
    ; Tabelle 1 Scheckempfänger und Absender
    $odoc.Range.Tables(1).Cell(1, 1).Range.InsertAfter($Scheckaus) ;Adresse Absender Scheckaus
    $odoc.Range.Tables(1).Cell(2, 1).Range.InsertAfter("Herr") ; Anrede
    $odoc.Range.Tables(1).Cell(3, 1).Range.InsertAfter("Vormane name") ; Vorname   Name Scheckempfänger
    $odoc.Range.Tables(1).Cell(4, 1).Range.InsertAfter("weg 5") ; Straße Scheckempfänger
    $odoc.Range.Tables(1).Cell(5, 1).Range.InsertAfter("535345") ; PLZ Scheckempfänger
    $odoc.Range.Tables(1).Cell(5, 2).Range.InsertAfter("Stadt") ; Ort Scheckempfänger
    
    
    ; Firmenlogo Absender Tabelle 2
    $odoc.Range.Tables(2).Cell(1, 1).Range.InlineShapes.AddPicture($Logo) ; Logo einfügen
    
    ;; Tabelle  3 Scheckdruck
    $odoc.Range.Tables(3).Cell(1, 1).Range.InsertAfter($Bankinstitut & $BLZ) ; Bezogenes Kreditinstitut
    $odoc.Range.Tables(3).Cell(1, 2).Range.InsertAfter($Scheckaus) ; Adresse Absender Scheckaustelle
    
    $odoc.Range.Tables(3).Cell(3, 1).Range.InsertAfter($Betragw) ; ScheckBetrag in Worten
    $odoc.Range.Tables(3).Cell(4, 2).Range.InsertAfter($Betragz) ; Scheckbetrag in Zahl
    
    $odoc.Range.Tables(3).Cell(2, 3).Range.InsertAfter("Vorname Name STraße PLZ Stadt") ; Adresse Kundenadresse
    
    $odoc.Range.Tables(3).Cell(5, 2).Range.InsertAfter("Erfurt") ; Austellungsort
    $odoc.Range.Tables(3).Cell(6, 2).Range.InsertAfter(_NowDate()) ; datum
    $odoc.Range.Tables(3).Cell(5, 1).Range.InsertAfter("Vorname Name STraße PLZ Stadt")
    
    ;Schecknummer
    $odoc.Range.Tables(3).Cell(10, 1).Range.Font.Name = "OCRAhuslik"
    $odoc.Range.Tables(3).Cell(10, 1).Range.InsertAfter($Schecknr & Chr(176))
    ;Kontonr.
    $odoc.Range.Tables(3).Cell(10, 2).Range.Font.Name = "OCRAhuslik"
    $odoc.Range.Tables(3).Cell(10, 2).Range.InsertAfter($Kto & Chr(35))
    ;Betrag
    $odoc.Range.Tables(3).Cell(10, 3).Range.Font.Name =  "OCRAhuslik"
    $odoc.Range.Tables(3).Cell(10, 3).Range.InsertAfter("00000" & $Betragz & Chr(33))
    ;Bankleitzahl
    $odoc.Range.Tables(3).Cell(10, 4).Range.Font.Name = "OCRAhuslik"
    $odoc.Range.Tables(3).Cell(10, 4).Range.InsertAfter($BLZ & Chr(176))
    ; Text
    $odoc.Range.Tables(3).Cell(10, 5).Range.Font.Name = "OCRAhuslik"
    $odoc.Range.Tables(3).Cell(10, 5).Range.InsertAfter("01" & Chr(176))
    
    ;; Tabelle  4 Empfänger Beleg
    
    $odoc.Range.Tables(4).Cell(1, 1).Range.InsertAfter("Scheckausteller")
    $odoc.Range.Tables(4).Cell(1, 2).Range.InsertAfter($Scheckaus)
    $odoc.Range.Tables(4).Cell(3, 1).Range.InsertAfter("Scheckempfänger")
    $odoc.Range.Tables(4).Cell(3, 2).Range.InsertAfter("Vorname Name STraße PLZ Stadt")
    
    
    $odoc.Range.Tables(4).Cell(5, 1).Range.InsertAfter("Scheckverwendungszweck")
    $odoc.Range.Tables(4).Cell(5, 2).Range.InsertAfter("Brutto EUR")
    $odoc.Range.Tables(4).Cell(5, 3).Range.InsertAfter("% Sk.")
    $odoc.Range.Tables(4).Cell(5, 4).Range.InsertAfter("Skonto EUR")
    $odoc.Range.Tables(4).Cell(5, 5).Range.InsertAfter("Netto EUR")
    
    $odoc.Range.Tables(4).Cell(9, 1).Range.InsertAfter("Datum: " & _NowDate() & @LF & "ScheckNR: " & $Schecknr & @LF & "BLZ " & $BLZ &  @LF & "Kto " & $Kto)
    $odoc.Range.Tables(4).Cell(9, 2).Range.InsertAfter($array[1][1] & $array[2][1] &  ",00 EUR")
    
    ;_WertzuWort($Wert)
    
    
    ; Funktionen Umwandelung Zahl zu Wort
    
    Func _WertzuWort($number)
    
    ;$number = StringSplit( $number,",")
    
    $number_vk = StringLen( $number)
    ;$number_nk = StringLen( $number[2])
    
    For $i = 1 To $number_vk
    
     $res = StringLeft($number, $i)
     ;MsgBox(0, "Leftmost 3 characters are:", $result)
     $var = StringRight($res, 1)
     ;MsgBox(0, "Rightmost 3 characters are:", $var)
     _num_word($var)
    
     $sString &= $number_xx & "*"
    
    
     IF $i = $number Then ExitLoop
    Next
    EndFunc
    
    
    
    Func _num_word($number)
    
    ;deklaration Nummmer /Wort
    $number0 = "NULL"
    $number1 = "EINS"
    $number2 = "ZWEI"
    $number3 = "DREI"
    $number4 = "VIER"
    $number5 = "FÜNF"
    $number6 = "SECHS"
    $number7 = "SIEBEN"
    $number8 = "ACHT"
    $number9 = "NEUN"
    
    IF $number = 0 Then $number_xx = $number0
    IF $number = 1 Then $number_xx = $number1
    IF $number = 2 Then $number_xx = $number2
    IF $number = 3 Then $number_xx = $number3
    IF $number = 4 Then $number_xx = $number4
    IF $number = 5 Then $number_xx = $number5
    IF $number = 6 Then $number_xx = $number6
    IF $number = 7 Then $number_xx = $number7
    IF $number = 8 Then $number_xx = $number8
    IF $number = 9 Then $number_xx = $number9
    
    EndFunc
    Alles anzeigen

    Die Word Datei sah dann so in etwas vom Aufbau aus.


    image.png

    Gruß Marcel

  • Webdriver für Chrome

    • gmmg
    • 24. April 2024 um 07:49

    Guten Morgen Sven,

    danke für deine Erläuterung.

    Gruß Marcel

  • Webdriver für Chrome

    • gmmg
    • 23. April 2024 um 15:06

    Hallo Sven,

    habe mir mal dein Boilerplate Tutorial angesehen und auch Abonniert :)

    Was mir in der Struktur nicht gefällt, dass alle selector und page-objects in der Ebene 1 liegen. Schon bei einigen Websites wird es meiner Meinung nach unübersichtlich, wenn alles im Hauptpfad liegt.

    Ich stelle mir die Aufteilung eher so vor. Hat das irgendwelche Nachteile gegenüber deiner Aufteilung? Was meinst du dazu?


    Viele Grüße

    Marcel

  • Webdriver für Chrome

    • gmmg
    • 22. April 2024 um 15:43

    Hallo Sven,

    ein kleines Beispiel zu deiner Frage.

    Die Website xyz hat ca. 40 -50 Agenturnummern. Pro Agenturnummer gibt es einen User und ein Passwort. Die MA selbst sollen die Zugangsdaten nicht kennen. Wurde so vom GF festgelegt.

    Diese Daten stehen nun verschlüsselt in einer internen DB. Das Script hat nun eine GUI, und die Agenturnummern werden in einem Dropdown aufgelistet.

    Wählt der User nun die Agenturnummer XYZ-1123, wird per Chromedriver die Website geöffnet und der automatische Login durchgeführt, die Website bleibt offen, der Chromedriver wird beendet.

    Auf der Webseite macht der User entsprechende Eintragungen oder was auch immer und schließt diese wieder. Im nächsten Moment kann es sein, dass der User die Nummer XYZ-456 benötigt.

    Erneuter Login usw.

    In einem anderen Fall wurden für die User Website Zugriffstoken erstellt, diese liegen auch wieder in einer DB und werden anhand des @Username per Website Link übergeben und per Chromedriver wird dann nur der Login durchgeführt. Auch hier wird der Chromedriver danach wieder beendet und die Website bleibt offen.

    Viele Grüße zurück

    Marcel

  • Webdriver für Chrome

    • gmmg
    • 22. April 2024 um 08:00

    Guten Morgen Sven,

    die Automatisierung wird von Kollegen (ca. 300) benutzt. Die Automatisierung selbst übergibt nur Login Daten und wird je nach Aufgabengebiet täglich mehrfach benutzt.

    Als Ladezeit hatte ich aktuell 5 Sekunden. Ich schau mir das mit dem Cookie Consent an, vielleicht ist es wirklich besser das darüber zu lösen.

    Danke

    Viele Grüße

    Marcel

  • Webdriver für Chrome

    • gmmg
    • 19. April 2024 um 14:22

    Ja genau, die Cookie Bestätigung soll nicht jedes mal gemacht werden.

    Richtig, wenn ich --user-data-dir angebe, wird wieder erst die Intranet-Seite geladen und dann erst die per _WD_Navigate gesetzte URL.

    Ist das eventuell etwas, was man umsetzen kann?

    Chrome-Einstellungen überschreiben  |  Manifest V2  |  Chrome for Developers
    So überschreiben Sie Chrome-Einstellungen mit einer Chrome-Erweiterung.
    developer.chrome.com

    Mach dir da wegen dem umsetzten keine Arbeit, außer es wird von anderen noch benötigt.

    Im Aufruf chrome://policy/ unter HomepageLocation sehe ich den Website Eintrag der da gesetzt ist.

    Chrome Enterprise Policy List & Management | Documentation
    Chrome Enterprise policies for businesses and organizations to manage Chrome Browser and ChromeOS.
    chromeenterprise.google


    Allen ein schönes Wochenende :)


    Gruß Marcel

  • Webdriver für Chrome

    • gmmg
    • 19. April 2024 um 07:44

    Guten Morgen,

    das boilerplate habe ich mir schon geladen und einen ersten Blick darauf geworfen. :)

    Bei den Automationen ist es so, dass einige der Webseiten bei jedem Zugriff eine Cookie Auswahl speichern wollen.

    Wenn ich nun in den DesiredCapabilities das --user-data-dir= angebe werden die Cookies nur beim ersten Zugriff abgefragt, beim nächsten Zugriff kommt dann keine Abfrage.

    Danke für deine Mühe mit mir :)

    Gruß Marcel

  • Webdriver für Chrome

    • gmmg
    • 18. April 2024 um 11:45

    Hallo Sven,

    hast du vielleicht für den Chrome ein einfachen Beispiel Script, was ich mir bearbeiten kann, also mit dem neuen Aufbau?

    Mein aktuelles Script sieht ja wie folgt aus:

    AutoIt
    #include "wd_helper.au3"
    #include "wd_core.au3"
    
    If @LogonDomain <> "domain" Or @LogonDNSDomain <> "domain.INT" Then EXIT ; schließe Script, wenn außerhalb der Domain geöffnet wird
    
    Local $file
    Local $sSession = ""
    
    $GoogleChrome64bit = "C:\Program Files\Google\Chrome\Application\chrome.exe"
    $GoogleChrome32bit = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
    
    If FileExists($GoogleChrome64bit) Then $file = $GoogleChrome64bit
    If FileExists($GoogleChrome32bit) Then $file = $GoogleChrome32bit
    
    If FileExists($file) Then
    
    	$google_chrome_version = FileGetVersion($file)
    	$google_chrome_version_array = StringSplit($google_chrome_version,".")
    
    	$webdriver = "chromedriver_" & $google_chrome_version_array[1] & ".exe"
    
    	If Not FileExists(@ScriptDir & '\data\'& $webdriver) Then
    		MsgBox(0,"Info","Google Chromedriver nicht vorhanden." & @CRLF & $webdriver)
    		Exit
    	EndIf
    Else
    	MsgBox(0,"Info","Google Chrome in folgenden Pfad nicht vorhanden." & @CRLF & @CRLF & $file)
    	Exit
    EndIf
    
    $url = "https://meine-URL.de"
    
    $user = "User"
    $pass = "Passwort"
    
    $_WD_DEBUG = $_WD_DEBUG_None  ;set to $_WD_DEBUG_None before compiling.
    
    ;Global $_WD_DRIVER
    Local $sDesiredCapabilities
    Local $iIndex
    
    _WD_UpdateDriver('chrome', @ScriptDir & '\data\') ; Webdriver Download
    
    SetupChrome()
    
    _WD_Startup()
    
    ; Hide the WebDriver Console
    ;_WD_ConsoleVisible(True)
    _WD_ConsoleVisible(False)
    
    $sSession = _WD_CreateSession($sDesiredCapabilities)
    
    _WD_Window($sSession, "Maximize", "{}")
    _WD_Navigate($sSession, $url)
    _WD_LoadWait($sSession)
    
    
    _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='name']")
    ConsoleWrite("+ @error = " & @error & @CRLF)
    $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='name']")
    
    _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='pass']")
    ConsoleWrite("+ @error = " & @error & @CRLF)
    $sElement_pass = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='pass']")
    
    If @error = $_WD_ERROR_Success Then
       _WD_ElementAction($sSession, $sElement_user, 'value',$user)
       _WD_ElementAction($sSession, $sElement_pass, 'value',$pass)
    	Sleep(500)
    EndIf
    
    $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='loginButton']")
    
    If @error = $_WD_ERROR_Success Then
     	_WD_ElementAction($sSession, $sElement, 'click')
     	Sleep(500)
    EndIf
    
    _WD_Shutdown()
    _WD_DeleteSession($sSession)
    
    Exit
    
    Func SetupChrome()
    
    	_WD_Option('Driver', 'data\'& $webdriver)
    	_WD_Option('Port', 9515)
    	_WD_Option('DriverParams')
    
    	;$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
        ;'"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
        ;'"prefs": {"credentials_enable_service": false} }}}}'
        
        $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
        '"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
        '"prefs": {"credentials_enable_service": false},' & _
    	'"args": ["--user-data-dir=C:\\Users\\' & @UserName & '\\AppData\\Local\\Google\\Chrome\\User Data\\chromedriver\\mein-Tool\\"] }}}}'
    
    EndFunc
    Alles anzeigen

    Wenn ich die DesiredCapabilities ohne --user-data-dir= aufrufe, werden die Cookies nicht gespeichert, deshalb ist der Aufruf hinterlegt.

    Gibt es dazu eine andere Lösung? Eben nochmal mit der heise.de Seite getestet.

    Gruß Marcel

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™