Ich nutze auch nur die bekannte dll Version.
Beiträge von gmmg
-
-
Montag könnte ich auf Arbeit schauen, welche ich da einsetze.
hier gibt es die von 2021. ohne Gewähr.
-
prüfe doch auch mal die Version der libmysql.dll
-
Hallo Sven,
hoffe es geht dir gut und danke für deine Antwort
Zum Post Befehl, das mache ich über die folgende FUNC.
Das Problem ist für meine Nutzung gelöst, ich teste die Tage aber auch nochmal deinen Ansatz.
AutoIt
Alles anzeigen_POST_DATA($URL, $JSON) FUNC _POST_DATA($URL, $JSON) ; Post with URL & JSON DATA $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") $oHTTP.Open("POST", $URL, False) $oHTTP.SetRequestHeader("Content-Type", "application/json") $oHTTP.SetRequestHeader("Cache-Control", "no-cache") $oHTTP.Send($JSON) $oReceived = $oHTTP.ResponseText $oStatusCode = $oHTTP.Status If $oStatusCode <> 200 Then MsgBox(4096, "Error", $oStatusCode,2) EndIf ;ConsoleWrite($oReceived) EndFunc
Gruß Marcel
-
Schnuffel ja, da bin ich mir auch nicht 100% sicher. Gestern als ich mit einem Base64 Converter getestet habe, war der Base64 String des Bildes in einer Zeile. Wollte ich diesen per Autoit Post absetzen, kam der Fehler zurück, der auf die Zeichenbegrenzung von 4096 Zeilen hindeutet. Mit dem Tool Postman hingegen ging der Post Befehl mit diesem langen String durch.
Nun habe ich bissl im engl Forum gestöbert und habe den Codeschnipsel zum base64 Convert gefunden. Diesen im ersten Step getestet und die gleiche Fehlermeldung bekommen.
Jetzt nachdem ich dem Script im Base64 Code noch das StringReplace für @LF eingefügt habe läuft dieses.
Code$FN = "D:\testbild.jpg" $dat=FileRead(FileOpen($FN,0)) $objXML=ObjCreate("MSXML2.DOMDocument") $objNode=$objXML.createElement("b64") $objNode.dataType="bin.base64" $objNode.nodeTypedValue=$dat $objNode.Text = StringReplace($objNode.Text, @LF, '') ; entferne Zeilenumbruch
sozusagen ist das Problem für diesen Fall gelöst.
Gruß Marcel
-
das ist dann das JSON welches ich absende
Code
Alles anzeigen$JSON = '{' & _ '"UserLogin":"user",' & _ '"Password":"pass",' & _ '"Ticket":{ ' & _ '"Title":"' & $JsonTitleSubject & '",' & _ '"QueueID":"5",' & _ '"LockID":"1",' & _ '"TypeID":"4",' & _ '"ServiceID":"",' & _ '"SLAID":"",' & _ '"StateID":"4",' & _ '"PriorityID":"3",' & _ '"CustomerUser":"' & $AbsenderMail & '"' & _ '},' & _ '"Article":{' & _ '"ArticleTypeID":"8",' & _ '"SenderTypeID":"1",' & _ '"From":"' & $AbsenderMail & '",' & _ '"Subject":"' & $JsonTitleSubject & '",' & _ '"Body":"' & $JsonBody & '",' & _ '"ContentType":"",' & _ '"MimeType":"text/html",' & _ '"Charset":"UTF8"' & _ '},' & _ '"Attachment":{' & _ '"ContentType":"image/jpg",' & _ '"Filename":"Testbild.jpg",' & _ '"Content":"' & $Attachment & '"' & _ '}' & _ '}'
-
mit diesem Stück Quellcode wandle ich das Bild in Base64
AutoIt
Alles anzeigen;Xroot 2011 ClipPut("") ;$FN=FileOpenDialog("Pick The Image You Want...","C:My DocumentsImages","Images(*.*)",3) ;If @error Then ; MsgBox(4096,"","No File Selected.....",2) ; Exit ;EndIf $FN = "D:\testbild.jpg" $dat=FileRead(FileOpen($FN,16)) $objXML=ObjCreate("MSXML2.DOMDocument") $objNode=$objXML.createElement("b64") $objNode.dataType="bin.base64" $objNode.nodeTypedValue=$dat $objNode.Text = StringReplace($objNode.Text, @LF, '') ;um den Zeilenumbruch zu entfernen ClipPut($objNode.Text)
-
Hallo Zusammen,
ich habe ein beliebiges jpg, z.B aus einem Screenshot Tool)
Dieses möchte ich an einem Webservice per Post Befehl übergeben, dazu muss diese Base64 Convertiert sein.
Leider ist hier der Base64 String von diesem Bild dann länger wie die von Autoit erlaubten 4095 Zeichen. (but keep in mind that no line in an AutoIt script can exceed 4095 characters.))
Mit der Anwendung Postman kann ich diesen String verarbeiten. Wie kann man das Problem für Autoit lösen?
Gruß Marcel
-
Hallo Chris,
ich mache es immer so.
Zuerst das _WD_Shutdown() , dann _WDeleteSession($sSession) .
Gruß Marcel
-
-
Racer, schau ich mir an.
-
Schnuffel, die Exe Tools laufen nur intern.
Mit einem Zertifikat bzw. dem Signieren soll ja erreicht werden, dass diese nicht vom Antivierenprogramm geblockt werden. Deshalb war ja mein Gedanke, dass ich ein gekauftes Zertifikat nutze. Gekaufte Zertifikate sind aber max. nur 1 Jahr gültig. dann müsste man diese erneuern.
Nach erstem Test so wie oben im Quelltext angegeben, funktioniert es ja. Das in Autoit erstellte Tool wird nicht mehr geblockt.
Ich teste das einfach die nächsten Wochen/ Monate so und berichte die Erfahrungen daraus.
Gruß gmmg
-
die Antivieren Software blockiert die Anwendung, obwohl diese vorher gescannt wurde und es hier keine Probleme beim scannen gab.
Nach mehrmaligem neu kompilieren funktioniert das Ausführen dann auch irgendwann. Wenn ich hingegen beim kompilieren direkt Signiere, tritt das Problem überhaupt nicht auf.
Deshalb die Aussage das es "Nervt".
Die Seite aus dem engl. Forum ist mir bekannt.
Danke
Gruß Marcel
-
Hallo Zusammen,
es gab im Forum schon einige Ansätze zum Signieren einer in Autoit geschriebenen Exe.
Da mich unser Antiviren Tool immer mal nervt, habe ich folgenden Lösungsansatz gefunden. Dieser funktioniert für unseren Einsatzzweck bisher problemlos.
Ich habe mir das signtool installiert und füge folgende Zeile an den Anfang des Scriptes:
AutoIt#AutoIt3Wrapper_Run_After=""%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.26100.0\x86\signtool.exe" sign /tr http://timestamp.digicert.com/scripts/timestamp.dll /td SHA256 /fd SHA256 /a "%out%""
Die entsprechende Exe ist dann digital Signiert.
Wie binde ich aber hier ein Zertifikat ein oder ist das nicht nötig, da dies ja auch nur 1 Jahr gültig ist?
Gruß gmmg
-
Das ist ohne dein Script zu kennen schwierig zu beantworten, da es verschiedene Ansätze gibt.
Schau dir einmal das "Getting started example" Script im Abschnitt "create capabilites for session" auf der folgenden Webseite an, da sollte das klar werden.
Ansonsten poste doch mal dein Script (ohne URL und Passwörter)
Hier mal ein Beispiel zum Login für Autoit, so wie ich das mache. Achtung hier wird noch die Chrome Version anhand der GoogleChrome.exe ausgelesen. Das müsstest du an deine Gegebenheiten anpassen.
AutoIt
Alles anzeigen#include "wd_helper.au3" #include "wd_core.au3" Local $file $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 $user = "" $pass = "" $_WD_DEBUG = $_WD_DEBUG_None ;set to $_WD_DEBUG_None before compiling. ;Global $_WD_DRIVER Local $sDesiredCapabilities Local $iIndex $url = "https://autoit.de/wcf/login/?url=https%3A%2F%2Fautoit.de%2F" SetupChrome() _WD_Startup() $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Window($sSession, "Maximize", "{}") _WD_Navigate($sSession, $url) _WD_LoadWait($sSession, 1500) ;WinSetState ("","",@SW_MAXIMIZE) _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='username']") ;ConsoleWrite("+ @error = " & @error & @CRLF) $sElement_user = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='username']") _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='password']") ;ConsoleWrite("+ @error = " & @error & @CRLF) $sElement_pass = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='password']") If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_user, 'value',$user) EndIf If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sElement_pass, 'value',$pass) EndIf Sleep(1000) ;Send("{ENTER}") $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "/html/body/div[1]/section/div/div/div[1]/form/section[1]/div/input[1]") ;_WD_HighlightElement($sSession, $sElement, 3) 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', 'chromedriver.exe') _WD_Option('Driver', 'data\'& $webdriver) _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @UserProfileDir & '\chrome.log"') _WD_Option('DriverParams') $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _ '"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _ '"prefs": {"credentials_enable_service": false},' & _ '"args": ["--disable-search-engine-choice-screen"] }}}}' EndFunc
Gruß gmmg
-
ab Google Version 128 kommt auch immer die Abfrage nach der Standard Suchmaschine.
Diese kann man in den $sDesiredCapabilities im Abschnitt "args" mit dem Eintrag "--disable-search-engine-choice-screen" definieren. Zumindest funktioniert das bei uns.
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
'"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
'"prefs": {"credentials_enable_service": false},' & _
'"args": ["--start-maximized", "--disable-search-engine-choice-screen"] }}}}'eventuell musst du das so benutzen: _WD_CapabilitiesAdd("args", "disable-search-engine-choice-screen")
-
Ja, denke auch das Chrome betroffen ist, habe ich aber nicht getestet.
Eventuell steht im engl Forum was. (link im post weiter oben)
Die "_WD_Option" Bereich ist da bestimmt auch anzupassen.
-
OK, die Lösung aus dem engl. Forum.
Chromedriver issues August 2024This morning I started to get some feedback my Chrome scripts (using chromedriver) were not working anymore. I have not determined that on computers with the…www.autoitscript.comMan muss den Port bei den Driver Parametern auch mit angeben.
Folgend eine dynamische Lösung von Danp2 bzw. mLipok
AutoItLocal $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 & '\chrome.log"')
Gruß gmmg
-
-
Moombas der folgende Abschnitt im Script funktioniert bei mir und verhindert die Abfrage der Standard Suchmaschine.
'"args": ["--start-maximized", "--disable-search-engine-choice-screen"] }}}}'
Mein Problem ist aktuell, dass der neue Chromedriver in Version 128 beim Google Chrome Version 128 nicht funktioniert.
Setze ich hingegen den Chromedriver 127 und Google Chrome 128 ein funktioniert es ohne Probleme.
Reinerm In deinem Link ist der jüngste Eintrag der 8.09.2023, also fast 1 Jahr alt. Das Problem tritt ja aber erst seit Google Chrome Version 128 auf und nur in Zusammenhang mit Chromedriver 128 auf.
Was hast du denn genau umgebaut?
Gruß gmmg