Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1680to1684
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

HTML Buttons auslesen & anklicken

HTML Buttons auslesen & anklicken
23.03.2019 21:45:15
Marc
Hallo Forumsgemeinde,
mit dem folgenden Code greife ich auf Yahoo Finance zu und fülle eine HTMLElementsCollection-Variable mit allen vorhandenen Buttons um den "OK"-Button für die Cookieabfrage über die InnerText-Eigenschaft zu finden und anzuklicken.
Hintergrund ist, dass die ClassName-Eigenschaft des Buttons von Yahoo regelmäßig geändert wird.
So weit klappt auch alles, nur der Button wird nicht geklickt. Eine Fehlermeldung erscheint nicht.
Kann mir jemand mitteilen weshalb der Button nicht geklickt wird?
Beste Grüße,
Marc

Sub Cookieabfrage()
'Variablen definieren
Dim IE As New InternetExplorer
Dim HTMLDoc As MSHTML.HTMLDocument
Dim HTMLButtons As MSHTML.IHTMLElementCollection
Dim HTMLButton As MSHTML.IHTMLElement
' Internet Explorer aktivieren
IE.Visible = True
IE.navigate "https://de.finance.yahoo.com/quote/DAI.DE/history?ltr=1"
Do While IE.ReadyState  READYSTATE_COMPLETE
Loop
' Variablen setzen
Set HTMLDoc = IE.Document
Set HTMLButtons = HTMLDoc.getElementsByTagName("Button")
' Iteration
For Each HTMLButton In HTMLButtons
Debug.Print HTMLButton.ClassName, HTMLButton.TagName, HTMLButton.ID, HTMLButton.innerText
If HTMLButton.innerText = "OK" Then HTMLButton.Click
Next HTMLButton
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: HTML Buttons auslesen & anklicken
23.03.2019 23:08:36
Zwenn
Hallo Marc,
was auch immer Du da wie versuchst ... Es gibt auf der Seite keinen Button, der 'OK' heißt. Aber falls Du mitteilen würdest, was Du erreichen willst, kann man Dir vermutlich weiter helfen.
Viele Grüße,
Zwenn
AW: HTML Buttons auslesen & anklicken
24.03.2019 06:25:01
Marc
Hallo Zwenn
den Button gibt es definitiv. Wenn Du die Sub laufen lässt bekommst Du die Eigenschaften des Buttons angezeigt mittles Debug.Print im Direktfenster.
Er befindet sich im Pop-Up, welches sich öffnet, sobald man die Seite betritt. Man muss darin die Nutzung von Cookies bestätigen.
Gruß,
Marc
AW: HTML Buttons auslesen & anklicken
24.03.2019 07:45:08
Hajo_Zi
Hallo Marc,
"Debug.Print im Direktfenster. " ich verrmuten das können nur wenige, Da nur vwenige auf Deinen Rechner schaue.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: HTML Buttons auslesen & anklicken
24.03.2019 08:10:05
Marc
Tu mir einen Gefallen. Lies meine Antwort richtig durch und schau Dir den Code an.
Gruß
AW: HTML Buttons auslesen & anklicken
24.03.2019 12:31:52
Zwenn
Hallo Marc,
ich habe den Button nicht angezeigt bekommen, weil ich in FireFox das AddOn "I don't care about cookies" verwende. Habe die URL jetzt im IE geöffnet und da erscheint auch der Button. Anklicken kannst Du ihn, indem Du direkt über seine CSS-Klasse auf ihn zugreifst. Das ganze sonstige Brimborium kannst Du Dir sparen.
Falls Du über die Objektvariablen stolperst, ich verwende für solche Sachen immer late binding, damit solche Makros auch ohne das Setzen von Verweisen auf anderen Rechnern laufen. Das heißt, den ganzen MSHTML Kram benutze ich nicht und auch der IE wird direkt instanziert.

Sub CookieButtonKlicken()
'Variablen für den Internetzugriff und das DOM-Handling
Dim url As String
Dim browser As Object
Dim knotenStamm As Object
url = "https://de.finance.yahoo.com/quote/DAI.DE/history?ltr=1"
'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
'Richtigen Button anhand seiner CSS-Klasse holen
Set knotenStamm = browser.document.getElementsByClassName("btn primary")(0)
If Not knotenStamm Is Nothing Then
'Button klicken
knotenStamm.Click
Else
'MessageBox hier nur zur Demonstration, wenn der Button nicht
'geklickt werden musste, weil er gar nicht aufgetaucht ist
MsgBox "Cookie wurde schon in einer früheren Seassion akzeptiert."
End If
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: HTML Buttons auslesen & anklicken
24.03.2019 13:07:42
Marc
Hallo Zwenn,
jetzt nimm es mir bitte nicht übel aber die ganze Arbeit hättest Du Dir sparen können wenn Du meinen Eröffnungsthread richtig gelesen hättest.
Dass ich den Button über die Eigenschaft "ClassName" ansprechen kann ist mir bewusst aber wie ich dort bereits schrieb ändert Yahoo den ClassName regelmäßig und genau diesem Umstand möchte ich meinen Code anpassen, indem ich über die InnerText Eigenschaft gehe, da die Bezeichnung "OK" einmalig ist.
Gruß,
Marc
AW: HTML Buttons auslesen & anklicken
24.03.2019 14:17:03
Zwenn
Hallo Marc,
war keine großartige Arbeit :-) Also wenn ich die Seite wiederholt aufrufe, nachdem ich die Cookies im IE wieder gelöscht habe, steht da immer die gleiche CSS-Klasse drin. Also kann ich nicht nachvollziehen, was bei Dir passiert.
Ich würde möglichst vermeiden etwas über Seiteninhalte zu identifizieren, sondern möglichst immer über die Struktur gehen. Ich weiß, dass das nicht immer möglich ist. In Deinem Fall prüfst Du den kompletten String des Buttons gegen "OK":
If HTMLButton.innerText = "OK" Then HTMLButton.Click

Ich habe es nicht ausprobiert, kann mir aber gut vorstellen, dass da noch Leerzeichen vorkommen und Du deshalb nicht den gewünschten Klick bekommst.
Probiere es so:
If InStr(1, HTMLButton.innerText, "OK") Then HTMLButton.Click

Oder so:
If Trim(HTMLButton.innerText) = "OK" Then HTMLButton.Click

Viele Grüße,
Zwenn
Anzeige
AW: HTML Buttons auslesen & anklicken
24.03.2019 15:05:21
Marc
Hallo Zwenn,
der ClassName wird von Yahoo alle paar Monate geändert, vermutlich um automatisierte Abfragen irgendwie zu erschweren. ;)
Jedenfalls hat es jetzt mit Hilfe der InString Funktion geklappt.
Ich danke Dir vielmals für Deine Unterstützung.
Beste Grüße,
Marc
AW: HTML Buttons auslesen & anklicken
24.03.2019 15:19:00
Zwenn
Aso,
wenn es nur alle paar Monate geändert wird, konnte ich es natürlich nicht sehen. Schön, dass es jetzt klappt :-)
Hier ist es wahrscheinlich nicht notwendig, weil die Beschriftung "OK" sich vermutlich nicht ändern wird. Du kannst den Button aber auch über die Struktur erkennen, indem Du eines der Attribute name oder value prüfst. So wie ich Dich nach diesem Austausch einschätze, weißt Du, wie Du getAttribute() dafür verwenden müsstest.
Ich reite so auf der Struktur rum, weil sich Inhalte gerne mal ändern. Sobald Du dann mit mehrsprachigen Seiten arbeitest, geht es nur über die Struktur, wenn man sich viel Arbeit zur Sprachanpassung ersparen will. Soll heißen, man kann mit dem gleichen Makro die Inhalte z.B. von ebay.de, ebay.com oder einer beliebigen anderen ebay-Seite holen. Solche mehrsprachig ausgeführten Seiten gibt es ja viele.
Viele Grüße,
Zwenn
Anzeige
AW: HTML Buttons auslesen & anklicken
24.03.2019 15:45:36
Marc
Hallo Zwenn,
das klingt interessant. Mein Erfahrungsschatz ist noch sehr übersichtlich, auch weil nach meinem letzten größeren Makro schon wieder mehrere Monate pausiert habe und so habe ich tatsächlich keine Erfahrung mit der getAttribute Funktion aber das sollte ja erlernbar sein. :) Sollte der OK Button wider Erwarten mal mit einem anderen Namen versehen werden dann werde ich auf diese Variante zurückkommen.
Vielen Dank für den Hinweis.
Beste Grüße,
Marc
AW: HTML Buttons auslesen & anklicken
24.03.2019 15:58:17
Zwenn
Hallo Marc,
wenn es Dich interessiert, hier ist ein kürzlich umgesetztes Projekt, in dem der Quelltext gut kommentiert ist. Dort musste ich an zwei Stellen auch auf den Seiteninhalt zurückgreifen.
Es ist relativ umfangreich, aber Du kannst darin einige Techniken sehen:
https://www.herber.de/cgi-bin/callthread.pl?index=1678466
Viele Grüße,
Zwenn
Anzeige
AW: HTML Buttons auslesen & anklicken
25.03.2019 20:13:29
Marc
Hallo Zwenn,
bei Gelegenheit werde ich es mir ansehen. Momentan beschäftigt mich jedoch mehr die Funktionsweise von Klassenmodulen, da ich diese noch nicht vollständig verstanden habe. Ich werde dazu aber gleich mal einen anderen Thread starten denn das passt jetzt nicht hier her. Ich würde mich natürlich freuen dort von Dir zu lesen.
Gruß,
Marc

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige