Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

IE Ausfüllen mal wieder mit ID

IE Ausfüllen mal wieder mit ID
15.05.2020 08:48:57
Sebastian
Hallo Profis,
ich möchte ein Select Feld ausfüllen allerdings hat dieses Feld nur eine ID die sich ändert. Hat jemand eine Idee wie ich das realisieren kann, dass die Zahl nicht mit gecheckt wird?
IEDocument.getElementById("meine_variabe_009_ist").Click
also irgendwie so
IEDocument.getElementById("meine_variabe_***_ist").Click
Also die 009 ändert sich leider
Ich hoffe Ihr wisst was ich meine - vielleicht geht es auch nicht. Fakt ist das der wert vor der Zahl nur einmal auf der Webseite da ist.
Viele Grüße und Danke
Sebastian

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 09:03:18
volti
Hallo Sebastian,
eine ID ist eindeutig und dürfte auch nur einmal im Web-Formular vorkommen.
M.E. ist eine Sternchenabfrage mit dem getElementById nicht möglich. Habe ich allerdings auch noch nie ausprobiert.
Schau Doch mal, was es rund um das Feld noch so gibt, was man abfragen könnte. Z.B. Classname.
Am besten postet Du hier mal den HTML-Text....
PS: Zur Darstellung hier im Forum kannst Du < und &GT; durch & LT ; und & GT ; (Leerzeichen raus) ersetzen oder in Textdatei packen.
viele Grüße
Karl-Heinz
Anzeige
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 09:22:42
Sebastian
Vielen Dank für deine Antwort.
Es gibt noch die
class="singeldb"
Aber die gibt es irgendwie mehrfach :-(
Hast du da eine Idee?
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 09:31:30
volti
Hallo Sebastian,
das ist klar, dass es die mehrfach geben kann. Da müsstest Du zählen, die wievielte (begonnen bei 0) es ist und dann die Indexnummer mit angeben. So in etwa:
IEDocument.getElementsByClassname("singeldb")(x).click
Oder Du ermittelst vorher die korrekte ID. Hier mal eine Idee (ungetestet)
Sub Test()
 Dim sArr() As String, sID As String
 sArr = Split(.document.getElementsByTagName("body")(0).innerHTML, "meine_variabe_")
 If UBound(sArr) &GT; 0 Then
   sID = "meine_variable_" & Left$(sArr(1), InStr(sArr(1), "_") - 1) & "_ist"
  End If
End Sub

viele Grüße
Karl-Heinz
Anzeige
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 09:48:59
Sebastian
Das ist genial - das geht :-)
Jetzt geht natürlich der Click schon :-) WOW
Kannst du mir noch kurz sagen wie ich aus dem Select Feld jetzt noch
sID ist jetzt meine fertige Variable
IEDocument.getElementById(sID).Click öffnet jetzt das Select Feld.
Hätte jetzt gerne die Postion 3 ausgewählt, der wert heiß "Bayern".
Vielen Dank für Hilfe :-)!
Großartig
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 10:05:44
volti
Hallo Sebastian,
Deinen etwas unübersichtlichen Text habe ich nicht verstanden.
Und ohne etwas "in der Hand" kann ich dazu auch keine Empfehlung (Select, Position 3, Bayern?) abgeben....
viele Grüße
KH
Anzeige
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 10:24:33
Martin
Hallo volti,
probier es mal mit .selectedIndex = 2.
Viele Grüße
Martin
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 10:33:47
Sebastian
Nein das geht leider nicht.
Ich kann den Text so auswählen
IEDocument.getElementById(sID).innerHTML = "Bayern"
"Bayern" steht dann auch im Select Feld. Aber scheinbar ist Java oder so aktiviert, denn nur wenn ich mit mit der Tastatur oder der Maus in das Feld Klicke wird das nächste Feld aktiviert.
Alles nicht so einfach.
AW: IE Ausfüllen mal wieder mit ID
15.05.2020 10:50:49
Martin
Hallo Sebastian,
also ich denke, dass es auch so funktioniert hätte (...aber vielleicht irre ich mich auch):
IEDocument.getElementById(sID).SelectedIndex = 2
...aber ist ja auch egal jetzt, du hast ja eine Lösung gefunden.
Google mal nach .fireEvent(), denn JavaScipt-Funktionen können auch per VBA ausgeführt werden.
Alternativ könntest du auch versuchen einen Mausklick bzw. eine Tastatureingabe zu simulieren, um das JavaScript auszulösen.
Es macht übrigens nicht viel Spaß in Blaue zu raten. Bei Angaben wie "scheinbar ist Java oder so aktiviert" bleibt mir nicht anderes übrig als dir ebenso mit "Google mal nach .fireEvent()" zu antworten.
Viele Grüße
Martin
Anzeige
fireEvent() geht meistens nicht mehr
15.05.2020 12:52:05
Zwenn
Hallo zusammen,
zunächst einmal solltest Du die URL mitteilen, um die es hier geht Sebastian oder mindestens den HTML-Code, wie von Karl-Heinz vorgeschlagen. So ist es nur Stochern im Nebel.
Eine Dropbox sprichst Du entweder so an, wie Martin es schreibt oder Du setzt das Value direkt. Um die Auswahl zu aktivieren, muss das Change-Event der Dropbox ausgelöst werden. Das geht in den allermeisten Fällen nicht mehr mit fireEvent(), sondern mit dispatchEvent(). Dazu kommen aber noch ein paar andere Sachen. Man kann das in einer Funktion kapseln:

Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub
Eine ID kannst Du übrigens nicht mit Jokerzeichen abfragen. Das wiederspricht ja schon dem Gesanken der Einmaligkeit ;-)
Viele Grüße,
Zwenn
Anzeige
AW: fireEvent() geht meistens nicht mehr
15.05.2020 13:09:10
Sebastian
Ihr habt alle recht mit der Seite oder besser mit einem Link. Allerdings befindet sich die Seite im Intranet und ist somit leider nicht erreichbar.
Ich guck mir das mit dispatchEvent() mal an. Allerdings geht es erst am Monatg wieder. Wünsche allen ein schönes WE.
Danke nochmal
AW: fireEvent() geht meistens nicht mehr
15.05.2020 16:53:25
Hajo_Zi
offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?
Das ist nur meine Meinung zu dem Thema.
GrußformelHomepage
GrußformelHomepage
Anzeige
AW: fireEvent() geht meistens nicht mehr
18.05.2020 07:27:31
Sebastian
Guten Morgen liebe Leute,
ich habe mal einen Code umgebau wo ich das ganze vielleicht verdeutlichen kann. Mit dem dispatchEvent bekomme ich die Wettersuche auf, aber wie kann ich jetzt den Wert "Nummer 2" der Suchergebbnisse auswählen?
Mit ".SelectedIndex = 2" geht das nicht.
Hat jemand noch einen Tip für mich?
Vielen Dank und viele Grüße
Sebastian
Und hier mal mein Code
Sub Wetter_Suchen()
Dim logInName As String
Dim browser As Object
Dim url As String
Dim knotenEingabe As Object
OrtName = "München"
url = "https://www.wetter.com/"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = True
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Manuelle Pause, damit die Seite komplett zur Verfügung steht
Application.Wait (Now + TimeSerial(0, 0, 5))
'Das input-Tag sondieren
'[Fehlerprüfung temporär ausschalten, weil getElementByID() einen
'Laufzeitfehler wirft, wenn es die gesuchte ID nicht gibt]
On Error Resume Next
Set knotenEingabe = browser.document.getElementsByClassName("[ search-field ][ flag__body ][  _
js-search-field ]")(0)
On Error GoTo 0
'Prüfen ob knotenEingabe erzeugt werden konnte
If Not knotenEingabe Is Nothing Then
'Das onKeyDown Event auslösen
'Ort eintragen
knotenEingabe.Value = OrtName
Call TriggerEvent(browser.document, knotenEingabe, "onKeyDown")
Else
MsgBox "Wetter Eingabefeld wurde nicht gefunden"
'Button klicken bringt nix, also Makro kontrolliert beenden
Exit Sub
End If
End Sub

Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)
'Basierend auf einer Prozedur von Anton aus dem Herber Forum
'Für allgemeine Events angepasst nach Vorschlag von QHaar auf StackOverflow
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub

Anzeige
AW: fireEvent() geht meistens nicht mehr
18.05.2020 11:42:25
Zwenn
Hallo Sebastian,
es handelt sich nicht um ein herkömmliches Dropdown Steuerelement, welches Du ansprechen willst. Es handelt sich um ein PopUp, welches über ein div-Tag als Layer realisiert wird. Da geht es natürlich nicht mit select. Da muss man manuell vorgehen.
Mir ist allerdings nicht klar, woher Du vor dem Aufruf der Seite mit einem Parameter wie "München" weißt, den wievielten Menüpunkt Du anklicken musst. Denn das Menü wird dynamisch generiert. Aber vielleicht willst Du ja etwas ganz bestimmtes, was immer gleich ist.
Du kannst im querySelector() einfach den Wert für den Menüpunkt eintragen, den Du anklicken willst. Die Zählung beginnt bei 0 für den ersten anklickbaren Eintrag:

Sub Wetter_Suchen()
Dim url As String
Dim browser As Object
Dim knotenEingabe As Object
Dim knotenPopUp As Object
Dim knotenPopUpClick As Object
Dim logInName As String
Dim ortName As String
ortName = "München"
url = "https://www.wetter.com/"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = True
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Manuelle Pause, damit die Seite komplett zur Verfügung steht
Application.Wait (Now + TimeSerial(0, 0, 5))
'Das input-Tag sondieren
Set knotenEingabe = browser.document.getElementsByClassName _
("[ search-field ][ flag__body ][ js-search-field ]")(0)
'Prüfen ob die NodeList knotenEingabe Elemente enthält
If Not knotenEingabe Is Nothing Then
'Ort eintragen
knotenEingabe.Value = ortName
'Das onKeyDown Event auslösen,
'um das PopUp Menü zu generieren
Call TriggerEvent(browser.document, knotenEingabe, "onKeyDown")
'Manuelle Pause, damit das Menü Zeit hat generiert zu werden
Application.Wait (Now + TimeSerial(0, 0, 1))
Else
MsgBox "Wetter Eingabefeld wurde nicht gefunden"
'Button klicken bringt nix, also Makro kontrolliert beenden
Exit Sub
End If
'Das generierte PopUp-Menü holen
'Die CSS-Klasse gibt es 2x (immer prüfen und ggf.
'nachsehen, welches Element benötigt wird)
Set knotenPopUp = browser.document.getElementsByClassName _
("autocomplete-suggestions layout--group")(0)
'Den gewünschten Menüpunkt über das Attribut data-index selektieren
'(Wobei mir nicht klar ist, woher man den bei einer dynamisch
'generierten Liste vorher weiß)
Set knotenPopUpClick = knotenPopUp.querySelector("div[data-index='1']")
'Das MouseOver Event für den gewählten Menüpunkt auslösen
Call TriggerEvent(browser.document, knotenPopUpClick, "mouseover")
'Den gewählten Menüpunkt anklicken
knotenPopUpClick.Click
End Sub


Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)
'Basierend auf einer Prozedur von Anton aus dem Herber Forum
'Für allgemeine Events angepasst nach Vorschlag von QHaar auf StackOverflow
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub
Viele Grüße,
Zwenn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige