[Internet Explorer COM Object] eintrag aus Auswahlliste auswählen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

[Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

07 Aug 2019, 09:01

Hallo,
Mein normale Vorgehensweise: wähle ich mit der Maus ein Eintrag aus Dropdown-Liste, erscheint abhängig von dem, was ich gewählt habe, verschiedene Checkboxen. Nun, möchte ich diesen Prozess mit IE COM Object automatisieren.

Wenn ich mit Code:

Code: Select all

IE := ComObjCreate("InternetExplorer.Application")
IE.Visible := true
IE.Navigate("https www.xxx.de ")  Broken Link for safety
Wait(IE)
pDoc := IE.document
pDoc.getElementByID("IddesDropDownList").value := "1"
Sleep, 2000
pDoc.getElementByID("iddescheckboxes").checked := true

es wird mir der richtige Eintrag ausgewählt, aber die Checkboxen erscheinen nicht.
Hat jemand Idee, wie ich das umsetzen kann?

LG
User avatar
Sir Teddy the First
Posts: 94
Joined: 05 Aug 2019, 12:31
Contact:

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

08 Aug 2019, 09:50

Dies ist keine Lösung, aber immerhin ein Anfang.
Das Problem hierbei ist, dass die Website auf eine tatsächliche Eingabe des Benutzers wartet.
Bei einem Eingabefeld würdest du das beheben, indem du ControlSend verwendest, d.h. tatsächlich Tastenanschläge an das Fenster sendest, anstatt nur den Inhalt via ".value" zu ändern.
Bei einer Dropdown-Liste ist das vielleicht mit ControlClick möglich, aber sicher bin ich mir nicht.
:eh: :think:
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

08 Aug 2019, 14:14

Danke für den Tipp,
sitze jetzt fast 3Std. dran, habe alles mit ControlSend und ControlClick, ausprobiert. Leider, ohne erfolg.
IE nimmt absolut keine Befehle von ControlClick und ControlSend an.

Code: Select all

F3::


CoordMode, Mouse , Client

pDoc.getElementByID("iddesDropDown").Focus() ;focus funktioniert 
ControlSend, Internet Explorer_Server1, {Down}, ahk_exe IEXPLORE.EXE ;Pfeil nach unter funktioniert nicht

;Control Click funktioniert überhaupt nicht
ControlClick, x200 y314, ahk_exe IEXPLORE.EXE,,,, NA
Sleep, 1000
ControlClick, x200 y330, ahk_exe IEXPLORE.EXE,,,, NA


ControlClick, , ahk_exe IEXPLORE.EXE,,,, NA x200 y314
Sleep, 1200
ControlClick, , ahk_exe IEXPLORE.EXE,,,, NA x200 y330


ControlClick, x200 y314, ahk_exe IEXPLORE.EXE,,,, Pos
Sleep, 1000
ControlClick, x200 y330, ahk_exe IEXPLORE.EXE,,,, Pos
reload
*/
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

09 Aug 2019, 04:19

Wenn der Wert der DDL programmgesteuert geändert wird, muss zusätzlich das entsprechende Ereignis ausgelöst werden. Bei einer DLL ist das in der Regel das OnChange-Ereignis. Füge einfach nach Setzen des DDL-Wertes folgende Zeile ein:

Code: Select all

pDoc.getElementByID("IddesDropDownList").onchange()
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

09 Aug 2019, 11:15

Danke für den Antwort, wenn es ich so mache, wie ich es verstanden habe,

Code: Select all

pDoc.getElementByID("IdDDL").value := "1"
Sleep, 500
pDoc.getElementByID("IdDDL").onchange()
bekomme folgende Fehlermeldung angezeigt:

Code: Select all

Error:  0x800A138A - 
Source:		(null)
Description:	(null)
HelpFile:		(null)
HelpContext:	0

Specifically: onchange
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

09 Aug 2019, 16:14

Ja, so habe ich das gemeint. Schade, dass es nicht funktioniert. Scheinbar läuft es nicht über das OnChange-Ereignis.

Kannst du bitte den HTML-Code der DDL hier posten? Müsste so etwas wie <select>...</select> oder <form>...</form> sein. Oder noch besser, den HTML-Code der kompletten Seite, sofern möglich (am besten als Anhang).
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

09 Aug 2019, 17:04

Danke, dass du dir soviel mühe gibst.

Es geht um DHL Geschäftskundenportal => Nachforschungsauftrag

1. DDL QuellCode vor Auswahl:

Code: Select all

<select name="T:oc_2397746050region1:pt:socShippingType:iComplex" title="Bitte wählen..." class="af_selectOneChoice_content" id="T:oc_2397746050region1:pt:socShippingType:iComplex::content" data-afr-init="true"><option title="Bitte wählen..." value="0">Bitte wählen...</option><option title="Nationale Sendung" value="1" selected="">Nationale Sendung</option><option title="Internationale Sendung" value="2">Internationale Sendung</option></select>
1. DDL QuellCode nach Auswahl:

Code: Select all

<select name="T:oc_2397746050region1:pt:socShippingType:iComplex" title="Bitte wählen..." class="af_selectOneChoice_content" id="T:oc_2397746050region1:pt:socShippingType:iComplex::content"><option title="Bitte wählen..." value="0" selected="">Bitte wählen...</option><option title="Nationale Sendung" value="1">Nationale Sendung</option><option title="Internationale Sendung" value="2">Internationale Sendung</option></select>
2. DDL QuellCode vor Auswahl:

Code: Select all

<select name="T:oc_2397746050region1:pt:socProduct:iComplex" title="Bitte wählen..." disabled="" class="af_selectOneChoice_content" id="T:oc_2397746050region1:pt:socProduct:iComplex::content"><option title="Bitte wählen..." value="0" selected="">Bitte wählen...</option><option title="DHL Paket National" value="1">DHL Paket National</option><option title="DHL Paket International" value="2">DHL Paket International</option><option title="DHL Paket Connect" value="3">DHL Paket Connect</option><option title="DHL Europaket" value="4">DHL Europaket</option><option title="DHL Retoure National" value="5">DHL Retoure National</option><option title="DHL Retoure International" value="6">DHL Retoure International</option></select>
2. DDL QuellCode nach Auswahl:

Code: Select all

<select name="T:oc_2397746050region1:pt:socProduct:iComplex" title="DHL Paket National" class="af_selectOneChoice_content" id="T:oc_2397746050region1:pt:socProduct:iComplex::content" data-afr-init="true"><option title="Bitte wählen..." value="0" selected="">Bitte wählen...</option><option title="DHL Paket National" value="1">DHL Paket National</option><option title="DHL Retoure National" value="2">DHL Retoure National</option></select>
Und dann erscheinen die Checkboxen.
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

10 Aug 2019, 14:23

Ok, ich konnte das Problem auf einer anderen DHL-Seite mit DropDownLists (Privatkunden) reproduzieren und auch (zumindest auf dieser Seite) lösen. Theoretisch müsste es auch im Geschäftskundenportal => Nachforschungsauftrag funktionieren.

Ersetze einfach pDoc.getElementByID("IdDDL").onchange() mit folgenden Zeilen:

Code: Select all

HTMLEvents := pDoc.createEvent("HTMLEvents")
HTMLEvents.initEvent("change", false, true)
pDoc.getElementByID("IdDDL").dispatchEvent(HTMLEvents)
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

10 Aug 2019, 15:18

Hallo, nochmal vielen Dank für die Arbeit die du geleistet hast.
Mein Code sieht jetzt so aus, aber leider klappt es nicht.
Habe hier noch ein Gif Datei angehängt, die werte werden übernommen aber Checkboxen erscheinen nicht.
Zum Schluss habe ich aus DDL mit der Maus gewählt, da erscheinen die boxen.

Code: Select all


pDoc.getElementByID("T:oc_2397746050region1:pt:socShippingType:iComplex::content").value := "1"
Sleep, 1000
HTMLEvents := pDoc.createEvent("HTMLEvents")
HTMLEvents.initEvent("change", false, true)
pDoc.getElementByID("T:oc_2397746050region1:pt:socShippingType:iComplex::content").dispatchEvent(HTMLEvents)
Sleep, 1000
pDoc.getElementByID("T:oc_2397746050region1:pt:socProduct:iComplex::content").value := "1"
Sleep, 1000

HTMLEvents := pDoc.createEvent("HTMLEvents")
HTMLEvents.initEvent("change", false, true)
pDoc.getElementByID("T:oc_2397746050region1:pt:socProduct:iComplex::content").dispatchEvent(HTMLEvents)


pDoc.getElementByID("T:oc_2397746050region1:pt:sbInsurance2500:iComplex::content").checked := true
Sleep, 1000
pDoc.getElementByID("T:oc_2397746050region1:pt:socServiceRequest:iComplex::content").value  := "1"
Sleep, 1000
pDoc.getElementByID("T:oc_2397746050region1:pt:dsebb:cbNext").Click()
video_gif_001.gif
video_gif_001.gif (648.57 KiB) Viewed 2631 times
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

11 Aug 2019, 03:46

Setze mal bitte den zweiten Parameter von .initEvent() auf true und versuchs nochmal (HTMLEvents.initEvent("change", true, true))
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

11 Aug 2019, 07:31

Leider, das gleiche verhalten wie oben

Code: Select all

pDoc.getElementByID("T:oc_2397746050region1:pt:socShippingType:iComplex::content").value := "1"
Sleep, 1000
HTMLEvents := pDoc.createEvent("HTMLEvents")
HTMLEvents.initEvent("change", true, true)
pDoc.getElementByID("T:oc_2397746050region1:pt:socShippingType:iComplex::content").dispatchEvent(HTMLEvents)
Sleep, 1000

pDoc.getElementByID("T:oc_2397746050region1:pt:socProduct:iComplex::content").value := "1"
Sleep, 1000
HTMLEvents := pDoc.createEvent("HTMLEvents")
HTMLEvents.initEvent("change", true, true)
pDoc.getElementByID("T:oc_2397746050region1:pt:socProduct:iComplex::content").dispatchEvent(HTMLEvents)
Sleep, 1000
User avatar
Ragnar
Posts: 614
Joined: 30 Sep 2013, 15:25

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen  Topic is solved

12 Aug 2019, 06:04

Mehr fällt mir auch nichts ein, wie man das noch über JavaScript lösen könnte. Bleibt nur noch die herkömmliche Vorgehensweise mit ControlSend. Dein Beispiel mit ControlSend sollte funktionieren, wenn man "ahk_id" statt "ahk_exe" verwendet. Zum Beispiel:

Code: Select all

pDoc.getElementByID("T:oc_2397746050region1:pt:socShippingType:iComplex::content").focus()
ControlSend, Internet Explorer_Server1, {down}, % "ahk_id " IE.hwnd
Nussbeisser
Posts: 117
Joined: 17 Jul 2019, 08:49

Re: [Internet Explorer COM Object] eintrag aus Auswahlliste auswählen

12 Aug 2019, 13:14

@Ragnar vielen lieben Dank, das hat jetzt funktioniert :)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 67 guests