Ihr seit super ![]()
schau ich mir dann morgen genauer an.
Ihr seit super ![]()
schau ich mir dann morgen genauer an.
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?
#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
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:
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.
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.
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?
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.
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
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
Danke, schau ich mir später mal an ![]()
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.
#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
Danke und viele Grüße
Marcel
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
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
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.
#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.
Gruß Marcel
Guten Morgen Sven,
danke für deine Erläuterung.
Gruß Marcel
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
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
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
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?
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.
Allen ein schönes Wochenende ![]()
Gruß Marcel
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
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:
#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