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

Mit .queryselector ifram Button clicken

Mit .queryselector ifram Button clicken
15.05.2020 09:14:31
Andrea
Hallo,
suche jetzt doch schon sehr lange und brauche Hilfe. Ich möchte auf einer HTML-Seite einen kleinen Button im Iframe anklicken. Es gelingt mir einfach nicht. Unten hänge ich den Html-Codeausschnitt an und meinen bisherigen Vba-Code (Ausschnitt). Danke für die Hilfe.
Gruß Andrea
HTML-Ausschnitt
-------------------------------------------
1. Abschnitt (Iframe) . Befindet sich ziemlich weit unten auf der Seite (gibt mehrere Iframes vorher)
Tagbeginn/Tagende = "spitze Klammern auf/zu"

Tagbeginn: iframe name="promotedListing_iframe" id="promotedListing_iframe" src="https://... Tagende"
2. Abschnitt (Button weiter unten)
Tagbeginn: input name="optinCheckbox" class="checkbox__control" id="optinCheckbox" type="checkbox" data-w-onchange="handleChange|w0-0 Tagende
-------------------------------------------

Sub Test-Formular ()
Dim c As Range
Dim IEApp As Object
Dim Bezeichnung As String
Dim Ort1 As String
Ort1 = Range("A1")
IEApp.navigate Ort1
Do: Loop Until IEApp.Busy = False
' .... usw. laden bis fertig.... usw. ... Abschnitt ausgeschnitten.............................. _
For Each c In Range("ID_Feld")
Bezeichnung = c
.getElementById(Bezeichnung).Value = c.Offset(, -1)
Next
'Ab hier: der Teil, um den es geht.....
Dim domIFrame As MSHTML.HTMLDocument
Set domIFrame = .frames("promotedListing_iframe").document
With domIFrame
.querySelector("input[id='optinCheckbox']").Click
End With
end with
'.... Abschluss  ausgeschnitten
End sub


		

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit .queryselector ifram Button clicken
15.05.2020 12:38:36
Zwenn
Hallo Andrea,
lesbaren HTML-Code musst Du in diesem Forum mit den HTML-Codierungen für die spitzen Klammern erzeugen. Also im Texteditor die öffnende durch & lt; und die schließeende durch & gt; über Ersetzen - Alle Ersetzen. Beide ohne Leerzeichen nach dem & natürlich:
https://wiki.selfhtml.org/wiki/Referenz:HTML/Zeichenreferenz#HTML-eigene_Zeichen
Du kannst den HTML-Code auch als Textdatei hier hochladen. Die Erweiterung einfach auf .txt setzen. Es gehen maximal 300 kB. Am Besten wäre es allerdings, Du gibst einfach die URL zu der Seite an, mit der Du arbeitest.
Hast Du es bereits geschafft etwas anderes im iFrame anzusprechen? Falls nicht, kann es sein, dass es nicht geht. Das ist dann der Fall, wenn das Dokument des iFrames von einem anderen Server kommt, als das Dokument, aus dem es aufgerufen wird. Das ist im IE als Sicherheitsmaßnahme eingebaut worden.
Soweit ich aus Deinem Code lesen kann, versuchst Du keinen Button, sondern eine Checkbox anzusprechen oder? Checkboxen lassen sich aber nicht anklicken, Du kannst den Haken mit nodeCheckbox.Checked = True setzen oder mit nodeCheckbox.Checked = False entfernen.
Ich habe es jetzt nicht ausprobiert, aber ich glaube Dein querySelector ist falsch. Du fragst auf eine ID ab. Dafür brauchst Du das HTML-Tag nicht angeben. Ausserdem wird eine ID mit dem # abgefragt und nicht mit id=, soweit ich weiß. Ob das bei querySelecor() geht weiß ich aber nicht. Für querySelectorAll() ist es so dokumentiert:
https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll
Es müsste also heißen:
.querySelectorAll("#optinCheckbox").Checked = True
Du kannst das gewünschte Element bei bekannter ID aber auch ganz einfach mit getElementByID() abfragen:
.getElementByID("optinCheckbox").Checked = True
Teile uns doch wie gesagt am besten die URL mit und dann sehen wir weiter.
Viele Grüße,
Zwenn
Anzeige
AW: Mit .queryselector ifram Button clicken
15.05.2020 15:27:37
Andrea
Hallo Zwenn, zunächst vielen Dank für Deine ausführliche Antwort und Verzeihung: ich hab mich wirklich mit dem "Button" missverständlich ausgedrückt. Es ist eine Checkbox. Du hast recht. Das Problem mit Deiner vorgeschlagenen getElementByID-Variante ist, es gibt innerhalb der vielen Frames eben doch gleich ID´s und auch außerhalb. Ist ein ziemlich verschachteltes HTML. Den Link zum Html-Code kann ich nicht so ohne weiteres hier einstellen. Die Seite liegt hinter dem Login und der Code beinhaltet einige eigene Daten. Hatte gehofft, dass ich es mit meinen Html-Codeschnipsel einigermaßen gut verständlich "rüber" bringe. Die von Dir vorgeschlagene Seite (https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll), hab ich natürlich schon "studiert". Aber irgendwie, sehe/sah ich vielleicht den Wald vor lauter Bäumen nicht mehr. Bin nun allerdings an anderer Stelle weiter gekommen und werde Deinen Vorschlag mit dem Checkbox-Haken heute noch angehen. Daran wird es sicher gelegen haben (Click an der Stelle verkehrt). Danke Dir. Das war schon sehr hilfreich.
Viele Grüße
Andrea
Anzeige
AW: Mit .queryselector ifram Button clicken
15.05.2020 17:17:33
Zwenn
Hallo Andrea,
wenn es die gleiche ID in mehreren iFrames gibt, ist das egal. Die sind unabhängig voneinander und jeder hat einen eignenen DOM-Baum. Gibt es hingegen in einem Frame mehrfach die gleiche ID, dann ist das natürlich schlecht.
Allerdings ist es dann auch nix anderes mit getElementByID() zu arbeiten, als mit einem querySelector(), mit dem Du auf eine ID abfragst. Die erste gefundene ID wird geliefert. Beim querySelectorAll() bin ich mir zwar nicht ganz sicher, aber auch da dürfte keine NodeList erzeugt werden, wenn eine ID abgefragt wird.
Noch eine Anmerkung zu Deinem Code. Zunächst solltest Du alle Variablen immer ganz oben im Makro versammeln. Es wird sonst sehr unübersichtlich und ist auch Fehleranfällig, wenn man Deklarationen plötzlich in Schleifen oder Entscheidungsstrukturen stehen hat.
Dann rate ich Dir für die Lesbarkeit des Codes unbedingt Einrückungen von Codeblöcken zu verwenden. Schon Deinen kurzen Ausschnitt kann man relativ schlecht lesen, weil alles linksbündig steht.
Wenn Du noch Fragen hast melde Dich einfach.
Viele Grüße,
Zwenn
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige