Hallo Sven,
ich weiß gar nicht wie ich dir danken soll.
Ich werde es morgen mal einbauen.
werde mich dann mit Sicherheit nochmal melden.
Vielen Lieben Dank
bis morgen
Werner
Hallo Sven,
ich weiß gar nicht wie ich dir danken soll.
Ich werde es morgen mal einbauen.
werde mich dann mit Sicherheit nochmal melden.
Vielen Lieben Dank
bis morgen
Werner
Genau es ist vertauscht.
Super Danke!
Viele Grüße
Werner
Hallo Sven
Die Daten kommen aus einen 2D Array mit 2 Spalten.
In der Regel sind es ca. 30-40 Adressen.
Es können auch mal 100 sein, wenn Ware vorausgeschickt wird mit Spedition und dann verteilt wird (ist aber eher selten).
Wenn du wegen der Schnelligkeit fragst, ist nicht ganz so wichtig.
Hauptsache stabil.
Viele Grüße
Werner
Hallo,
ihr habt beide recht!
Ich hatte es einmal so versucht:
$Timer = 200
While 1
$sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "/html/body/div[1]/aside[1]/div[2]/div/div[2]/div/div/form/button")
;_WD_HighlightElement($sSession, $sElement, 3)
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement, 'click')
Sleep($Timer)
Endif
$Timer = $Timer + 100
WEnd
Alles anzeigen
Wollte ihn damit Überlisten
Ich denke in dem Fall, war mein Ansatz richtig.
Lief manchmal auch ins unendliche und das bei jedem xPath.
Bin mal gespannt, wie das noch ausgeht!
Egal wie, trotzdem Danke an alle Beteiligten.
Gruß Werner
Hallo Sven,
vielen Dank für deine Mühe.
Ich hatte das Thema schon einmal 2021 angestoßen.
Link: Webdriver Button drücken
Damals hatte mir Dan, vom englischen Forum geantwortet.
Von ihm habe ich auch die Fehlerabfrage übernommen.
ZitatAlles anzeigenAutoIt
AutoItLocal $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath) If @error = $_WD_ERROR_Success Then ...
Dan schrieb dass es an den iFrames hängt.
Bei meine Orte z. B.
AutoIt Alles anzeigen; ==> Click Button "Meine Orte" anklicken ************************************** Local $xPath = "//div[@id='my_places_menu_item']" _WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath ) Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath) If @error = $_WD_ERROR_Success Then _WD_ElementAction($sSession, $sButton, 'click') ConsoleWrite("Fehler -- Meine Orte" & @CRLF) ;MsgBox(0,"Fehler -- Meine Orte","") Endif sleep ($t) ;*******************************************************************************************************
Hier kann ich keinen richtigen xPath finden.
Weder ChroPath noch SelectorsHub findet da was vernünftiges.
Hab dann solange rumprobiert bis ich auf den xPath kam.
Aber wie du schon geschrieben hast, es läuft nicht stabil.
Ich habe schon einige Webseiten ferngesteuert , aber sowas hatte ich auch noch nie.
Nochmals Danke
viele Grüße
Werner
Danke!
Reiß dir kein Bein aus ich kann warten.
Wenn du nicht weiter kommst kann ich dir auch Test login Daten senden.
Gibt es da eine geschützte Möglichkeit im Forum.
Viele Grüße
Werner
Nochwas!
ist Fehler abfrage so richtig.
Hallo Sven,
danke für deine Meldung.
Kannst du Screenshots von der Webseite und vom DOM, wo du mit SelectorsHub den XPath eingibst um deine Elemente zu finden, machen?
; TomTom MyDrive Link
Global $URLMyDr = ("https://mydrive.tomtom.com/de_de/#mode=viewport+viewport" _
& "=49.9071,7.8184,13,0,-0+ver=3")
Die Webseite ist doch vorhanden.
Mein Vorhaben:
Es soll nach dem einloggen, in der Reihenfolge wie im Scribt, die einzelnen Buttons gecklickt bzw. Einträge gemacht werden.
Im Original kommt noch eine Schleife drum, um diverse Adressen rein zu schieben.
Wie ich schon geschrieben habe, funktioniert es manchmal und meisten aber nicht.
Ich vermute es liegt an den xPath oder iframes
Es sind auch nicht immer die selben die nicht funktionieren.
Ich habe es schon mit Sleep von 100 bis 1500 probiert.
Habe auch um jeden Punkt eine While 1 Schleife gemacht und Sleep jedes Mal um 100 erhöht.
Lass mich wissen was du noch alles brauchst.
Ich weiß das du dich mit dem Webdriver auskennst.
Viele Grüße
Werner
Hallo ihr Experten,
ich hab mal wieder ein Problem.
Hab versucht mit ChroPath und SelectorsHub den xPath auszulesen.
Komme da nicht weiter.
Mal läuft das Script durch, meistens bleibt es irgendwo stehen.
- vielleicht sind die xPath falsch oder es liegt an den iframes oder svg.
- im headless Mode läuft es überhaupt nicht.
- gibt es eine möglichkeit das besser abzusichern - Hatte schon eine While 1 Schleife um jeden Punkt gebaut.
- kann man den Zugriff schneller machen - oder läßt Mydrive nicht mehr zu.
Vielleicht kann mal einer drüber gucken und mir entsprechende Tips geben.
Danke!
Viele Grüße
Werner
#include <MsgBoxConstants.au3>
#include "wd_core.au3"
#include "wd_helper.au3"
;Dos Console für Fehlerermitlung
$_WD_DEBUG = $_WD_DEBUG_Info ; ==> Dos Fehlerconsole an [<>]
;$_WD_DEBUG = $_WD_DEBUG_None ; ==> Dos Fehlerconsole aus [<>]
;*********************************************************
; Path zum Geckodriver
;FileChangeDir ( "C:\Webdrv22\au3WebDriver-0.11.0")
FileChangeDir ("C:\Users\xx2\Desktop\Tourenplanung Jaeckel\WebDrv\au3WebDriver-0.11.0\")
; TomTom MyDrive Link ;*
;Global $URLMyDr = ("https://mydrive.tomtom.com/de_de")
Global $URLMyDr = ("https://mydrive.tomtom.com/de_de/#mode=viewport+viewport" _
& "=49.9071,7.8184,13,0,-0+ver=3")
Global $t = 200 ; Werte für Sleep
Global $mail = "xxyy@gmx.de"
Global $pass = "11111111"
Global $HanName = "Landhotel"
Global $HanAdress = "Westfälische Str. 52 57368 Lennestadt"
Local $sDesiredCapabilities, $sSession
SetupGecko()
_WD_Startup( )
Sleep ($t)
Global $sSession = _WD_CreateSession($sDesiredCapabilities)
_WD_Navigate($sSession, $URLMyDr)
Sleep (2000)
login_MyDrive()
Gecko_beenden()
func login_Mydrive()
; ==> Cookie Button **************************
Local $xPath = "//*[@id='cookie_banner_allow_button']"
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
sleep ($t)
_WD_ElementAction($sSession, $sButton, 'click')
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- Cookie Button" & @CRLF)
;MsgBox(0,"Fehler -- Cookie Button","")
Endif
;*********************************************************************************************************
; ==> Click Anmelde Button *****************************************************************
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, "//button[contains(text(),'Anmelden')]" )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath,"//button[contains(text(),'Anmelden')]" )
sleep ($t)
_WD_ElementAction($sSession, $sButton, 'click')
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- Anmelde Button" & @CRLF)
;MsgBox(0,"Fehler -- Anmelde Button","")
Endif
;*******************************************************************************************************
;==> iframe Login suchen ********************************************************************
Local $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//*[@id='iFrameResizer0']")
sleep ($t)
_WD_FrameEnter($sSession, $sElement)
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- iframe Login suchen" & @CRLF)
;MsgBox(0,"Fehler -- iframe Login suchen","")
Endif
;********************************************************************************************************
; ==> Emailadresse eintragen *********************************************************
Local $xPath = "//input[@type='text']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sElement_mail = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
sleep ($t)
_WD_ElementAction($sSession, $sElement_mail, 'value',$mail)
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- Emailadresse eintragen" & @CRLF)
;MsgBox(0,"Fehler -- Emailadresse eintragen","")
Endif
;*******************************************************************************************************
; ==> Passwort eintragen *********************************************************
Local $xPath = "//input[@type='password']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sElement_pass = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
sleep ($t)
_WD_ElementAction($sSession, $sElement_pass, 'value',$pass)
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- Passwort eintragen" & @CRLF)
;MsgBox(0,"Fehler -- Passwort eintragen","")
Endif
;*****************************************************************************************************
; ==> Click Login button ***************************************************************************
Local $xPath = "//*[@id='loginButton']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
sleep ($t)
_WD_ElementAction($sSession, $sButton, 'click')
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- Login button " & @CRLF)
;MsgBox(0,"Fehler -- Login button ","")
Endif
;*********************************************************************************************************
; ==> iframe zurück setzen******************************************************************************************
_WD_Navigate($sSession, $URLMyDr) ; https://mydrive.tomtom.com/de
sleep ($t)
If @error = $_WD_ERROR_Success Then
ConsoleWrite("Fehler -- iframe zurück setzen" & @CRLF)
MsgBox(0,"Fehler -- iframe zurück setzen","")
Endif
;********************************************************************************************************************
; ==> Click Button "Meine Orte" anklicken **************************************
Local $xPath = "//div[@id='my_places_menu_item']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath)
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Meine Orte" & @CRLF)
;MsgBox(0,"Fehler -- Meine Orte","")
Endif
sleep ($t)
;*******************************************************************************************************
; ==> Button "Favoriten" Button ******************************
$xPath = "//span[@id='my_places_favourites']"
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Favoriten Button " & @CRLF)
;MsgBox(0,"Fehler -- Favoriten Button ","")
Endif
sleep($t)
;*******************************************************************************************************
Sleep(800) ; kurze Pause
;*******************************************************************************************************
; ==> Button "Neuen Ort hinzufügen" ******************************
Local $xPath = "/html[1]/body[1]/div[2]/div[4]/div[1]/div[4]/div[2]/div[1]/div[1]/div[2]/div[4]/div[1]/div[1]"
;Local $xPath = "//div[@id='favourites_view_add_favourite_button']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Neuen Ort hinzufügen" & @CRLF)
;MsgBox(0,"Fehler -- Neuen Ort hinzufügen","")
Endif
sleep ($t)
;*******************************************************************************************************
; ==> "Adresse" eintragen *********************************************************
Local $xPath = "//input[@id='favourite_location_search_input_box']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sElement_HanAdress = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_HanAdress, 'value',$HanAdress)
ConsoleWrite("Fehler -- Adresse eintragen" & @CRLF)
;MsgBox(0,"Fehler -- Adresse" eintragen","")
Endif
sleep ($t)
;*******************************************************************************************************
;; ==> "Nummer und Name" eintragen ********************************************************
Local $xPath = "/html[1]/body[1]/div[2]/div[4]/div[1]/div[4]/input[1]"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sElement_HanName = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sElement_HanName, 'value',$HanName )
ConsoleWrite("Fehler -- Nummer und Name eintragen " & @CRLF)
;MsgBox(0,"Fehler -- Nummer und Name eintragen ","")
Endif
sleep ($t)
;*******************************************************************************************************
;; ==> "Adresse bestätigen" ohne Button *********************************************************
Local $xPath = "//*[@id='favourite_search_list_item_address_0']"
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Adresse bestätigen" & @CRLF)
;MsgBox(0,"Fehler -- Adresse bestätigen","")
Endif
sleep ($t)
;*******************************************************************************************************
; ==> Button Fertig ******************************
Local $xPath = "//button[@id='favourite_add_done_btn']"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
If @error = $_WD_ERROR_Success Then
_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Button Fertig " & @CRLF)
;MsgBox(0,"Fehler -- Button Fertig","")
Endif
Sleep($t)
;*******************************************************************************************************
MsgBox(0,"Fehler Box","Adresse löschen")
; ==> Adresse löschen ******************************
Local $xPath = "/html[1]/body[1]/div[2]/div[4]/div[1]/div[4]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[3]/div[1]/div[4]/div[1]/*[name()='svg'][1]/*[name()='path'][1]"
;Local $xPath = "/html/body/div[2]/div[4]/div/div[4]/div[2]/div[1]/div/div[1]/div/div/div[3]/div/div[4]/div/svg"
_WD_WaitElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
Local $sButton = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, $xPath )
_WD_ElementAction($sSession, $sButton, 'click')
If @error = $_WD_ERROR_Success Then
;_WD_ElementAction($sSession, $sButton, 'click')
ConsoleWrite("Fehler -- Adresse löschen " & @CRLF)
;MsgBox(0,"Fehler -- Adresse löschen","")
Endif
Sleep($t)
;*******************************************************************************************************
EndFunc ;==> login_Mydrive()
Func SetupGecko()
_WD_Option("Driver", "C:\Users\xx2\Desktop\Tourenplanung Jaeckel\WebDrv\au3WebDriver-0.11.0\geckodriver.exe")
_WD_Option ( 'DriverParams' , '--log trace --marionette-port 2828' )
_WD_Option('Port', 4444)
; ==> neues Profil anlegen
; im sichtbaren Modus ausführen
Global $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"browserName": "firefox", "acceptInsecureCerts":true}}}'
; unsichtbar ausfführen
;~ Global $sDesiredCapabilities = _
;~ '{' & _
;~ ' "capabilities": {' & _
;~ ' "alwaysMatch": {' & _
;~ ' "browserName": "firefox",' & _
;~ ' "acceptInsecureCerts": true,' & _
;~ ' "moz:firefoxOptions": {' & _
;~ ' "args": [' & _
;~ ' "--headless"' & _
;~ ' ]' & _
;~ ' }' & _
;~ ' }' & _
;~ ' }' & _
;~ '}'
EndFunc ;==>SetupGecko
Func Gecko_beenden()
MsgBox(0,"","") ; hält Browser an
_WD_DeleteSession($sSession)
_WD_Shutdown()
EndFunc ; ==> Gecko_beenden()
Alles anzeigen
Hi Bugfix,
Danke für den Tip mit ControlCommand().
hab's so hinbekommen.
allen anderen Danke ich auch für Eure Hilfe.
Viele Grüße
Werner
Danke Bugfix,
gute Idee.
WinWaitActive("ITN Converter")
Local $aTest = [60]
Local $aTest = ControlCommand($hFen1,"ITN Converter", 1009,"GetCount", "")
;Local $aTest = ControlListView($hFen1,"ITN Converter",1009,"SelectAll" )
_ArrayDisplay($aTest)
MsgBox(0,"",$aTest) ;zeigt 57 an
ProcessClose("ITNConv.exe")
exit
Er zeigt mir an das 57 drin sind.
Wie kriege ich die in ein array und wie muss ich sie einzel ansprechen.
Viele Grüße
Werner
Gibt es eine Möglichkeit die Listboxen anders anzusprechen als mit
ControlSend( $hFen1,"","[CLASS:ComboBox; INSTANCE:1]" ,"{PGUP}" )
hatte es zuerst mit Send("{PGUP}" )
Funktioniert beides nicht.
Sonst lasse ich es einfach wie es ist.
Vielen Dank für deine Bemühungen und der Geduld mit mir.
Viele Grüße
Werner
Wenn ich mit
ShellExecute($Converter,"", @SW_HIDE)
ausführe kommen 2 mal die listboxen wie auf dem Bild.
Alles andere ist versteckt.
Mit _shellExecuteHidden() bleibt das Prog an den Listboxen hängen.
Viele Grüße
Werner
Hi Sven,
Hab die Funktion mit ausprobiert.
Ist ja wirklich ganz einfach (wenn man's weiß)
Leider sind da 2 Listboxen drin die mit
ControlSend( $hFen1,"","[CLASS:ComboBox; INSTANCE:1]" ,"{PGUP}" )
ControlSend($hFen1, "", 1009, "H")
ControlSend( $hFen1,"","[CLASS:ComboBox; INSTANCE:1]" ,"{UP}" )
gesteuert werden.
Das mag er überhaupt nicht.
Und hängt sich dort auf.
Noch irgend eine Idee von dir?
Lieben Gruß
Werner
Du machst mich fertig Werner, auf eine witzige Art und Weise 🤣 . Du hast die UDF doch selbst verlinkt: englisches Forum.
Sven
Entschuldige bitte!
Das war das 1. mal, dass ich sowas gemacht habe.
War immer der Meinung, da müsste die .au3 in den Include Ordner.
Hab ich auch gemacht.
Ging natürlich nicht!
Du lachst dich wahrscheinlich kaputt.
Dann hab ich einfach, die Func rauskopiert und siehe da, was für ein Erfolg.
Ich habe leider auf Grund meines Alters, nie ein Wort englisch gelernt.
Ich jage alles durch den Translator und da kommt manchmal nix gescheites raus.
Also wenn ich nochmal dumm frage hab Mitleid mit mir
Viele Grüße
Werner
#Include <WinAPIEx.au3>
Local $sPath = "C:\Program Files (x86)\ITN Converter\"
_shellExecuteHidden($sPath & "ITNConv.exe")
erhalte Fehlermeldung (undefined function)
Wenn es das ist was ich vermute.
Wo finde ich die udf.
Soll angeblich eingebunden sein
LG Werner
Super Danke
der 2. Code hat funktioniert.
Mit dem 1. weiß ich nicht wohin???
LG Werner
Hab da noch was: Webriver firefox
Wo muss ich hier "--headless" einfügen.
Hab ein Update gemacht und sieht jetzt so aus.
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"browserName": "firefox", "acceptInsecureCerts":true}}}'
Func SetupGecko()
_WD_Option("Driver", "C:\WebDrv22\au3WebDriver-0.11.0\geckodriver.exe")
_WD_Option('DriverParams' , '--log trace --marionette-port 2828')
_WD_Option('Port', 4444)
$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"browserName": "firefox", "acceptInsecureCerts":true}}}'
EndFunc
LG Werner
Achso 🤣 . Allerdings hat _MouseTrap() erstmal nichts mit der Funktion _shellExecuteHidden() zu tun.
Dies war sicherlich nur ein Beispiel von dir, um zu sagen das du keine Lust auf Experimente hast - verstehe.
Genau so war es!
Na gut, wenn du mit deinen zwei Fenstern leben kannst und willst, dann okay. Falls nicht, versuche _shellExecuteHidden() gern, da ist keine große Magie dabei.
Einfach _shellExecuteHidden($sPath & 'ITConv.exe') aufrufen und im Taskmanager siehst du das die Instanz läuft, aber eben nicht sichtbar. Nun solltest du deine Einstellungen im Programm machen können, ohne das die beiden angesprochenen Fenster aufpoppen.
Wenn es nicht mehr ist werde ich es natürlich probieren.
LG Werner