Beiträge von gmmg
-
-
Ja, aktuell mache ich das Webdriver Update immer von Hand. Die Scripte + Webdriver liegen bei uns im Netzlaufwerk und der User der das öffnet, hat nur RO Rechte.
Der Webdriver wird dann einmal heruntergeladen und per CMD auf die verschiedenen Scripte im Netzlaufwerk verteilt, ebenso, wenn es im Script mal eine Anpassung gab.
Wir müssen diesen Prozess mit dem Netzlaufwerk aber demnächst anpassen, da wir auf Azure Cloud wechseln. Da habe ich aber noch keine richtige Idee, wenn es mal ein Script Update gibt.
Die Scripte müssten dann ja lokal auf die Clients und brauchte für eventuelle Script Update einen Updater. Die WD_UpdateDriver Funktion wäre da ja schon mal ganz gut.
Danke
Gruß Marcel
-
Hat jemand den Webdriver für die Google Chrome Version 124.x.x.x. Die ist irgendwie nicht verfügbar für die Browserversion 124.x.x.x.
-
Guten Morgen Sven,
danke für deine Antwort. Ich schaue mir das an und teste nochmal.
Die Umstellung auf Webdriver musste damals erfolgen, weil die IE Automation nicht mehr funktioniert hat.
Vieles wurde da aus Beispielen übernommen.
Gruß Marcel
-
Hallo Sven,
beim Ausführen des Scriptes ist der der Google Chrome Browser geschlossen. Von daher sollte keine alte Session offen sein.
Wenn ich das Script mit den folgenden sDesiredCapabilities ausführe, kommt die Standard Webseite und danach die Navigation zur gewünschten Webseite.
AutoIt$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\\meinTool\\", "--profile-directory=Default"] }}}}'Wenn ich das so nutze wird für jedes der Autologin Tools ein entsprechender Ordner im AppData Pfad erstellt. Inhalt des Ordners siehe Bild unten.
Wenn ich die sDesiredCapabilities wie folgt nutze, wird scheinbar die Standard Webseite nicht vorher geöffnet oder es geht einfach schneller.
Es scheint aber dennoch eine Unterschied zu dem Parameteraufruf zu geben.
"C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de
AutoIt$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _ '"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _ '"prefs": {"credentials_enable_service": false},' & _ '"args": ["start-maximized"] }}}}'Kann man das eventuell besser Lösen oder wird das nicht benötigt ?
Gruß Marcel
-
Hallo Zusammen,
ich nutze jetzt schon länger den Webdriver für die Google Chrome Automatisierung.
Leider wurde bei uns jetzt per GPO eine Startseite "Intranet" gesetzt und das _WD_Navigate($sSession, $url) zur eigentlichen URL dauert dadurch viel länger.
Beim Google Chrome kann ich ja per Parameter direkt eine URL übergeben. Funktioniert sowas auch bei dem Webdriver?
Beispiel: "C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de Hier kommt die per GPO hinterlegte Seite nicht.
Danke
Gruß gmmg
-
SOLVE-SMART , ich selbst würde die DB auf ein Netzlaufwerk legen, aber per UNC Server Pfad im Script öffnen.
Das Beispiel hoben habe ich mal aus meinen Scripten zusammen kopiert.

Auch muss man bei @IPAddress schauen ob man die @IPAddress1, @IPAddress2 , @IPAddress3 oder @IPAddress4 benötigt.
Ich habe das mal so auf die schnelle gelöst. geht sicherlich mit Schleife schöner.
;-----get IP -----------------------------------------------------------
IF StringLeft(@IPAddress1,3) = "10." Then $ip = @IPAddress1
IF StringLeft(@IPAddress2,3) = "10." Then $ip = @IPAddress2
IF StringLeft(@IPAddress3,3) = "10." Then $ip = @IPAddress3
IF StringLeft(@IPAddress4,3) = "10." Then $ip = @IPAddress4Die Umsetzung auf eine MySQL DB / Maria DB /MS-SQL ist auch kein Problem oder wie von water vorgeschlagen in eine Datei schreiben.
Gruß gmmg
-
Schreibe dir ein kleines Tool, was dann am PC im Autostart oder Loginscript liegt und schreibe deine gewünschten Daten in eine Datenbank (MySQL /MS Access oder sonstige).
Dann hast du diese immer aktuell in der DB vorliegen.
Hier mal ein Beispiel:
AutoIt
Alles anzeigen#AutoIt3Wrapper_UseX64=y #include <Array.au3> #include <Date.au3> #include <D:\Scripte\MS_AccessCom\Access UDF\Access_UDF.au3> ;--------- MSAccess DB ------------ $dbname = @ScriptDir & "\DB.accdb" $tblname = "Login" Local $Connection = _Start_Connection($dbname & ";") Local $Array_Login = _Get_Records("SELECT * FROM " & $tblname) _ArrayDisplay($Array_Login) Local $InsertData = _Insert_Data("INSERT INTO " & $tblname & "([Computer], [IP], [User], [Datum]) VALUES ('" & @ComputerName & "', '"& @IPAddress3 & "', '" & @UserName & "', '" & _Now() & "');") Local $Array_Login = _Get_Records("SELECT * FROM " & $tblname) _ArrayDisplay($Array_Login) _Close_Connection()Die DB sieht dann so aus.
Die UDF gibt es hier : https://www.autoitscript.com/forum/topic/17…ent-accdb-only/
Gruß gmmg
-
Hi GML,
leider kann man deinem Post nicht entnehmen, was du genau mit den Daten vorhast.
Wir haben früher mal die Info benötigt, welcher User aktuell an welchem Client arbeitet. Hier wurden die entsprechenden Daten per Anmeldescript in eine Datenbank geschrieben.
Falls ihr bereits Azure/ Intune benutzt, lassen sich dort meines Wissens auch diese Daten abgreifen.
Gruß gmmg
-
Hallo,
ich nutze oft die Metro_CreateGUI UDF.
Hier macht man das ja einfach mit einem Label "GUICtrlCreateLabel"
Beispiel, kann ja für die einfache GUI angepasst werden.
AutoIt
Alles anzeigenLocal $tel_GUI = _Metro_CreateGUI("", 280, 210,-1,-1,True) ;Add control buttons Local $Control_Buttons_tel = _Metro_AddControlButtons(True,False,True) ;Set variables for control buttons Local $GUI_CLOSE_BUTTON = $Control_Buttons_tel[0] Local $GUI_MINIMIZE_BUTTON = $Control_Buttons_tel[3] $label_tel = GUICtrlCreateLabel("Support",65,20,110,25) GUICtrlSetFont($label_tel, 9, 300, 0, "Arial") $n = GUICtrlCreatePic(@ScriptDir & "\bin\images\rotkreuz_gr.jpg", 12, 10, 38, 30) $lb1 = GUICtrlCreateLabel("Username:", 30, 80) $telEdit1 = _GUICtrlEdit_Create($tel_GUI, "erf", 90, 80, 100, 20, $ES_AUTOHSCROLL) $telButton = _Metro_CreateButton("Weiter", 90, 160, 100, 20) GUISetState()die GUI sieht dann so aus.
Gruß gmmg
-
Wenn du im IcoFX dein Bild hast, klickst du oben einfach auf das Windows Symbol.
Hier kommt dann im Endeffekt das Ico mit den verschiedenen Größen raus.
Gruß gmmg
-
sowas hier?
Get localgroup membersHello again AutoIt people I'm having troubles on how to create a script, that would check a list (txt file) of computers for users of localgroup…www.autoitscript.com -
Hier mal ein Autoit Script, welches ich nutze.
AutoIt
Alles anzeigen#include <Array.au3> #include <File.au3> #include <Date.au3> $path = "c:\Backup\" Dim $avArray[6] $avArray[0] = "Pfad1" $avArray[1] = "Pfad2" $avArray[2] = "Pfad3" $avArray[3] = "Pfad4" $avArray[4] = "Pfad5" $avArray[5] = "Pfad6" For $i = 0 To 5 ;MsgBox(0,"",$path & $avArray[$i] & "\") Local $aFileList = _FileListToArray($path & $avArray[$i] & "\", Default, Default, True) If @error = 1 Then MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.", 1) Exit EndIf If @error = 4 Then MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.", 1) Exit EndIf ;_ArrayDisplay($aFileList, "$aFileList") For $file = 1 To UBound($aFileList) -1 ;MsgBox(0,"",$aFileList[$file]) ; Get the Date/Time for the Created property of the file $arrFileTime = FileGetTime($aFileList[$file], 1, 0) ; Format the Date/Time to calculate the difference $strFileTime = $arrFileTime[0] & "/" & $arrFileTime[1] & "/" & $arrFileTime[2] & " " & $arrFileTime[3] & ":" & $arrFileTime[4] & ":" & $arrFileTime[5] ; Get the "Now" time to calculate the difference $strNowCalc = _NowCalc() ; Calculate the difference in Days ("D") $strDateDiff = _DateDiff("D", $strFileTime, $strNowCalc) ; Display the Difference in Days If $strDateDiff > 4 Then ;ConsoleWrite("Difference from '" & $strFileTime & "' and '" & $strNowCalc & "' ( in Days ) = " & $strDateDiff & @CRLF) FileDelete( $aFileList[$file]) EndIf Next NextGruß gmmg
-
schau auch mal hier: WebDriver- Chrome Browser
und hier ein Beispiel:
Der Pfad für den msedgedriver muss entsprechend angepasst werden.
_WD_Option('Driver', 'D:\Scripte\WebDriver\EdgeDriver\edgedriver_win32_120\msedgedriver.exe')
AutoIt
Alles anzeigen#include "wd_helper.au3" #include "wd_core.au3" ;Edgedriver download : URL https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH#downloads ;Global $_WD_DRIVER Local $sDesiredCapabilities ;$_WD_DEBUG = $_WD_Debug_Info ; None ; Info $_WD_DEBUG = $_WD_DEBUG_None ;set to $_WD_DEBUG_None before compiling.? $url = "https://autoit.de/wcf/login/?url=https%3A%2F%2Fautoit.de%2F" $user = "test" $pass = "test" SetupEdge() _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, 1500) Sleep(1000) _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='username']") ConsoleWrite("+ @error = " & @error & @CRLF) $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[@name='password']") ConsoleWrite("+ @error = " & @error & @CRLF) $sElement_pass = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@name='password']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_pass, 'value',$pass) Sleep(500) EndIf $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='loginForm']/form/section[1]/div/input[1]") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement, 'click') Sleep(500) EndIf _WD_Shutdown() _WD_DeleteSession($sSession) Exit Func SetupEdge() ;_WD_Option('Driver', 'msedgedriver.exe') _WD_Option('Driver', 'D:\Scripte\WebDriver\EdgeDriver\edgedriver_win32_120\msedgedriver.exe') _WD_Option('Port', 9515) ;_WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\msedge.log"') _WD_Option('DriverParams', '--verbose') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _ '"ms:edgeOptions": {"excludeSwitches": ["enable-automation"], ' & _ '"useAutomationExtension": false, "args": ["start-maximized"]}}}}' EndFuncGruß gmmg
-
-
Hallo Casi4712,
meine erste Frage wäre gewesen, ob die Batch auch an dem PC mit einem anderen User funktioniert.
Schön das es gelöst wurde.
Gruß gmmg
-
steht so in der Function

-
Also mit _ArrayAdd hat es bei mir nicht funktioniert.
Hatte dann _ArrayInsert benutzt. Ergebnis siehe Bild.
AutoIt
Alles anzeigen#include <Array.au3> Global $oConnection, $aRecordSet, $sQuery, $aRecordSetArr, $Spalten Global $sTableName = "tblTable1" Global $sDatabaseName = "D:\Test-mdb\Test.mdb" If Not FileExists($sDatabaseName) Then Exit $oConnection = ObjCreate("ADODB.Connection") $oConnection.Open("Driver=Microsoft Access Driver (*.mdb); DBQ=" & $sDatabaseName) $oRecordSet = ObjCreate("ADODB.RecordSet") $sQuery = "Select * From " & $sTableName $oRecordSet.Open($sQuery, $oConnection) For $i = 0 to $oRecordSet.Fields.Count - 1 $Spalten &= $oRecordSet.Fields.Item($i).Name & '|' Next $Spalten = StringTrimRight($Spalten, 1) $aRecordSetArr = $oRecordSet.GetRows ;_ArrayAdd($aRecordSetArr, $Spalten, 0) _ArrayInsert($aRecordSetArr, 0, $Spalten) $oRecordSet.Close() $oConnection.Close() _ArrayDisplay($aRecordSetArr, 'Tabelle = ' & $sTableName) -
-
Habe das jetzt mal in meine Access UDF übertragen.
Danke nochmal an Moombas für den Input

_Get_Records with Column Names
AutoIt
Alles anzeigen#Region _Get_Records with Column Names ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Get_Records ; Description ...: This function will collect data from an access database and give it as an array. ; Syntax ........: _Get_Records($sSQLstring) ; Parameters ....: $sSQLstring - SQL Statement for creating table. ; Return values .: If success, then it will return the data as an array. If any errors see this list ; Return -1 - Connection error ; Return -2 - Recordset error ; Return -3 - No data in that table ; Author ........: kcvinu ; Modified ......: sep 2015 ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _Get_Records("SELECT [Column1],[Column2] FROM MyTable WHERE Column3 = '2500' ;") ; See the single quote. ; =============================================================================================================================== Func _Get_Records($sSQLstring) If Not IsObj($objConnection) Then Return -1 If Not IsObj($objRecordSet) Then Return -2 _Open_Recordset($sSQLstring) If Not $objRecordSet.RecordCount Or ($objRecordSet.EOF = True) Then Return -3 Dim $arrRecords, $column_name If Not @error Then ;Local $header[$objRecordSet.Fields.Count], $rows For $i = 0 To $objRecordSet.Fields.Count - 1 $column_name &= $objRecordSet.Fields($i).Name & "|" Next ;MsgBox(0,"", $column_name) $column_name = StringTrimRight($column_name, 1) $arrRecords = $objRecordSet.GetRows() _ArrayInsert($arrRecords, 0, $column_name) EndIf _Close_RecordSet() Return $arrRecords EndFunc #EndRegion