Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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
Internetseite mit Anmeldung öffnen
20.04.2020 14:51:27
Harald
Hallo,
In einem Datenblatt habe ich mehrere Buttons, mit denen ich beim Anklicken verschiedene Internetseiten (z.B. Online-Banking) über Firefox oder Chrome öffnen möchte, dort automatisch den Benutzernamen und das Passwort eintragen lasse und die Seite dann starte.
Leider habe ich keine Ahnung, wie ich das umsetzen kann. Kann mir hier jemand helfen?
Im voraus schon vielen Dank

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Internetseite mit Anmeldung öffnen
20.04.2020 15:02:48
Zwenn
Hallo Harald,
aus VBA heraus kannst Du nur direkt auf den Internet Explorer als Browser zugreifen. Auf andere Browser geht das nur über Selenium:
https://www.selenium.dev/
Viele Grüße,
Zwenn
AW: Internetseite mit Anmeldung öffnen
20.04.2020 15:25:57
Harald
Hallo Zwenn,
vielen Dank für die schnelle Antwort.
Wie kann ich das mit dem Internet Explorer realisieren? Für mich ist es eigentlich egal, welchen Browser ich verwende.
AW: Internetseite mit Anmeldung öffnen
20.04.2020 16:18:52
Zwenn
Hallo Harald,
das Einloggen muss für jede Seite individuell programmiert werden, da auch jede Seite individuell programmiert wurde. Dazu muss also für jede Seite der HTML-Code analysiert werden, um darin die Elemente für die Eingabe von Benutzername, Passwort und Einlog-Button zu identifizieren.
Einlogbildschirme sind meistens allerdings recht überschaubar. Solange keine komplizierten Webtechniken zum Einsatz kommen, hängt der Aufwand also von der Anzahl der Seiten ab, die Du auf diese Weise aufrufen möchtest. Dass das Ganze sehr unsicher ist, weil jeder, der an die Excel Datei kommt sich direkt in Deine Onlinekonten einloggen kann, ist Dir vermutlich bewußt.
Onlinebanking dürfte allerdings nicht funktionieren, da dafür seit einiger Zeit eine Zwei-Faktor-Autorisierung verwendet werden muss. Z.B. bei meiner Bank verwende ich zum Einloggen die "normalen" Zugangsdaten inklusive Passwort und zusätzlich eine Foto-TAN. Letztere lässt sich nicht automatisieren.
Gib doch mal 1 oder 2 Links zu Seiten an, in die Du Dich einloggen willst.
Viele Grüße,
Zwenn
Anzeige
AW: Internetseite mit Anmeldung öffnen
21.04.2020 12:09:20
Zwenn
Hallo Harald,
hier ist ein Beispiel, wie man sich auf der Seite einloggen kann. Es ist allerdings nicht möglich zu prüfen, ob noch etwas zusätzliches gemacht werden muss, weil der Zugang nach 3 Versuchen gesperrt wird. Zwar habe ich keinen Zugang, aber wenn die meine IP-Adresse sperren gehts auch nicht mehr.
Was evtl. zusätzlich auf der angegebenen Seite gemacht werden muss, ist das Auslösen eines Keypress-Events für die beiden Eingabefelder. Es ist für beide Felder hinterlegt, aber ich habe das Auslösen jetzt (noch) nicht eingebaut.
Damit Du verstehst, was das Makro macht, müsste ich jetzt etwas ausholen. Dazu habe ich aber keine Zeit im Moment. Deshalb nur kurz grob dazu:
Wie Du sehen kannst, werden die beiden Eingabefelder über getElementByID() angesprochen. Eine ID ist (soll es sein) im HTML-Code einer Seite einmalig. Konnte ein Element nicht über seine ID selektiert werden, wirft VBA zur Laufzeit einen Fehler. Deshalb habe ich das in die Fehlerroutine gekapselt und prüfe hinterher, ob das Objekt vorhanden ist.
Der Button hingegen wird über getElementsByClassName() angesprochen. Das bezieht sich auf eine CSS-Klasse, die beliebig vielen Elementen auf einer Seite zugewiesen worden sein kann. CSS steht für Cascading Style Sheet, womit das Design der Elemente einer Seite festgelegt wird.
Bei getElementsByClassName() ergibt sich also eine Sammlung von Elementen, eine sogenannte Node Collection, während über getElementByID() gezielt auf ein ganz bestimmtes Element der Seite zugegriffen wird. Um nun auf ein bestimmtes Element einer Node Collection zuzugreifen, muss das entsprechende Element über seinen Index in der Sammlung angesprochen werden.
Alle nach dem verwendeten Kriterium gefundenen Elemente werden der Reihenfolge des Auffindens nach in die Sammlung aufgenommen. Die Zählung der Indizes beginnt dabei immer bei 0 (Null). Der Button ist auf der vorliegenden Anmeldeseite das einzige Element mit der CSS-Klasse button-right. Deshalb kann es der Objektvariablen knotenSubmit direkt über die Angabe des Index in der Sammlung ganz am Ende der Zeile übergeben werden. Das passiert über die runden Klammern (0).
Es gibt noch die Methode getElementsByTagName(), über die ebenfalls eine Node Collection aufgebaut wird. In dem Fall aus allen HTML-Elementen, die dem angegebenen HTML-Tag entsprechen. Dabei wird die gesamte HTML-Struktur zwischen dem öffnenden und dem schließenden Tag als ein HTML-Element betrachtet. Das können also auch ganze Strukturen sein, wenn z.B. innerhalb eines div-Tags weitere HTML-Elemente untergebracht sind.
Hier ist nun das Makro. Das kann man auch anders schreiben. Sowohl besser, als auch schlechter. Ich habe es aber ganz bewußt genau so gemacht, weil Du die 3 angesprochenen Elemente auf jeder Seite zum Einloggen ansprechen musst. Du musst halt "nur" rausfinden wie, bzw. über welche Kriterien.

Sub UnionInvestEinloggen()
Dim browser As Object
Dim url As String
Dim knotenBenutzername As Object
Dim knotenPasswort As Object
Dim knotenSubmit As Object
Dim benutzerName As String
Dim passWort As String
benutzerName = "Dein Benutzername"
passWort = "Dein Passwort"
url = "https://www.union-investment.de/process?action=showLogin"
'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
'Eingabefeld für den Benutzernamen selektieren
On Error Resume Next
Set knotenBenutzername = browser.document.getElementByID("user")
On Error GoTo 0
'Prüfen, ob das Feld selektiert werden konnte
If Not knotenBenutzername Is Nothing Then
'Wenn ja, den Benutzernamen eintragen
knotenBenutzername.Value = benutzerName
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Eingabefeld für den Benutzernamen wurde nicht gefunden"
Exit Sub
End If
'Eingabefeld für das Passwort selektieren
On Error Resume Next
Set knotenPasswort = browser.document.getElementByID("pin")
On Error GoTo 0
'Prüfen, ob das Feld selektiert werden konnte
If Not knotenPasswort Is Nothing Then
'Wenn ja, den Passwort eintragen
knotenPasswort.Value = passWort
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Eingabefeld für das Passwort wurde nicht gefunden"
Exit Sub
End If
'Submit-Button selektieren
Set knotenSubmit = browser.document.getElementsByClassName("button-right")(0)
'Prüfen, ob der Submit-Button selektiert werden konnte
If Not knotenSubmit Is Nothing Then
knotenSubmit.Click
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Der Submit-Button wurde nicht gefunden"
Exit Sub
End If
End Sub
Die Kurzversion davon ist folgende. Allerdings ohne jegliches Abfangen von Fehlern und ohne Variablen auch nicht ohne weiteres verwendbar, wenn Events ins Spiel kommen. Du kannst hier aber die Kernfunktionalität besser nachvollziehen:

Sub UnionInvestEinloggen()
Dim browser As Object
'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 "https://www.union-investment.de/process?action=showLogin"
Do Until browser.ReadyState = 4: DoEvents: Loop
'Benutzernamen eingeben
browser.document.getElementByID("user").Value = "Benutzername"
'Passwort eingeben
browser.document.getElementByID("pin").Value = "Passwort"
'Submit-Button anklicken
browser.document.getElementsByClassName("button-right")(0).Click
End Sub
Viele Grüße,
Zwenn
Anzeige
AW: Internetseite mit Anmeldung öffnen
21.04.2020 15:29:20
Harald
Hallo Zwenn,
vielen Dank für die viele Mühe, die du dir gemacht hast.
Ich werde das am Wochenende zu Hause ausprobieren.
Nochmals vielen Dank
AW: Internetseite mit Anmeldung öffnen
23.04.2020 11:59:17
Harald
Hallo Zwenn,
ich habe beide Versionen gestern ausprobiert.
Wenn ich den Button anklicke funktioniert auch fast alles korrekt - die beiden Formularfelder werden ausgefüllt, aber die Anmeldeseite schließt sich nicht, dabei bleibt das Namensfeld schon ausgefüllt.
Wenn ich den Code im Einzelschritt-Modus prüfe funktioniert alles korrekt und die Anmeldeseite schließt sich.
Woran kann das liegen?
Mfg
Harald
AW: Internetseite mit Anmeldung öffnen
24.04.2020 14:12:39
Zwenn
Hallo Harald,
ich habe für die beiden Eingabefelder jetzt eingebaut, dass das Keypress Event ausgelöst wird, bevor die Eingaben stattfinden. Probiere das mal aus. Wenn das nicht klappt, dann weiß ich nicht warum nicht, denn der Button selbst hat kein Event und die Eingabefelder haben jeweils nur das Keypress Event.
Bei meinen Versuchen wird im IE einfach das Feld für das Passwort wieder geleert und es kommt auch kein Hinweistext, dass die Eingegeben Daten falsch sind. Wie gesagt, probiere es mal aus:
Das um das Auslösen der Keypress-Events erweiterte Makro:

Sub UnionInvestEinloggen()
Dim browser As Object
Dim url As String
Dim knotenBenutzername As Object
Dim knotenPasswort As Object
Dim knotenSubmit As Object
Dim benutzerName As String
Dim passWort As String
benutzerName = "DeinBenutzername"
passWort = "DeinPasswort"
url = "https://www.union-investment.de/process?action=showLogin"
'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
'Eingabefeld für den Benutzernamen selektieren
On Error Resume Next
Set knotenBenutzername = browser.document.getElementByID("user")
On Error GoTo 0
'Prüfen, ob das Feld selektiert werden konnte
If Not knotenBenutzername Is Nothing Then
'Wenn ja, keypress Event auslösen und den Benutzernamen eintragen
Call TriggerEvent(browser.document, knotenBenutzername, "onkeypress")
knotenBenutzername.Value = benutzerName
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Eingabefeld für den Benutzernamen wurde nicht gefunden"
Exit Sub
End If
'Eingabefeld für das Passwort selektieren
On Error Resume Next
Set knotenPasswort = browser.document.getElementByID("pin")
On Error GoTo 0
'Prüfen, ob das Feld selektiert werden konnte
If Not knotenPasswort Is Nothing Then
'Wenn ja, keypress Event auslösen und das Passwort eintragen
Call TriggerEvent(browser.document, knotenPasswort, "onkeypress")
knotenPasswort.Value = passWort
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Eingabefeld für das Passwort wurde nicht gefunden"
Exit Sub
End If
'Submit-Button selektieren
Set knotenSubmit = browser.document.getElementsByClassName("button-right")(0)
'Prüfen, ob der Submit-Button selektiert werden konnte
If Not knotenSubmit Is Nothing Then
knotenSubmit.Click
Else
'Wenn nicht, Hinweis ausgeben und Makro beenden
MsgBox "Der Submit-Button wurde nicht gefunden"
Exit Sub
End If
End Sub
Die folgende Sub löst ein übergebenes HTML-Event aus:

Private 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
Viele Grüße,
Zwenn
Anzeige
AW: Internetseite mit Anmeldung öffnen
26.04.2020 18:10:06
Harald
Hallo Zwenn,
vielen Dank für die Information, aber daran lag es wohl nicht.
Es ist aber nicht so schlimm - ich lasse einfach den Befehl für den Klick auf den Submit-Button weg und klicke ihn dann nach dem Öffnen der Seite von Hand an.
Hauptsache ich muss nicht alle Daten immer neu eingeben, sondern kann sie aus Excel direkt eingeben lassen.
Passwortschutz ist kein Problem, da ich die Datei nur auf einem Stick habe.
Trotzdem nochmals vielen Dank für Deine Hilfe
mfg
Harald
AW: Internetseite mit Anmeldung öffnen
29.04.2020 18:09:12
Harald
Hallo Zwenn,
ich habe nun herausgefunden, dass der erste Start am Tag normal funktioniert, wenn ich den Button später erneut drücke werden die Daten in die Felder eingegeben, aber die finale Seite lässt sich nur noch öffnen, wenn ich den submit-Button von Hand anklicke.
Das funktioniert auch mit den ersten beiden Versionen ohne keypress-Aktion.
Anzeige
AW: Internetseite mit Anmeldung öffnen
20.04.2020 19:11:33
Jenny
Hallo Zwenn,
habe hierzu mal eine Off-Topic Frage.
Habe irgendwas mal gelesen, dass mit der neuen Windows 10 Version 2004 auch ein neuer Browser kommen soll. Gilt das dann immer noch, bzw. kann ich meine bisherigen Makros, die auf den Browser zugreifen weiterhin 1:1 verwenden oder muss ich sie ändern?
Danke
Jenny
AW: Internetseite mit Anmeldung öffnen
20.04.2020 20:29:04
Zwenn
Hallo Jenny,
der "neue" Browser, den Mcrosoft mit Windows 10 ausliefert, ist der Edge Browser. Ich habe seine Entwicklung nicht ganz mitverfolgt, aber es kann sein, dass jetzt die Version mit der Chromium Engine kommt. Das ist die Render-Engine von Google.
Edge bekommt allerdings auch in der neuen Version keine COM Schnittstelle. Die ist notwendig, um ein Programm direkt via VBA Fernsteuern zu können:
https://de.wikipedia.org/wiki/Component_Object_Model
Der Internet Explorer bleibt damit der einzige Browser, mit dem es direkt aus VBA geht. Allerdings ist der IE EOF (End Of Live). Der wird seit einger Zeit nicht mehr weiter entwickelt und es gibt immer mehr Seiten, die im IE nicht mehr richtig laufen. Eine davon ist z.B. Yahoo Finance. Dieser Trend wird zunehmen, da Bootstrap und WordPress angekündigt haben, den IE in künftigen Versionen nicht mehr zu berücksichtigen:
https://www.golem.de/news/browser-bootstrap-und-wordpress-wollen-ie-support-beenden-2004-147846.html
Seiten, die keine dynamischen Inhalte haben, kann man aus VBA heraus auch direkt über MSXML auslesen. Das geht sogar um einiges schneller. Sobald aber ein iFrame, AJAX Inhalte oder sonstige Nachlade- und JavaScript-Geschichten im Spiel sind, funktioniert das nicht mehr, weil die Inhalte nicht vollständig erreicht werden können.
Im Zweifelsfall heißt das, umsteigen auf Python und Beautiful Soap oder wenn es einem mehr liegt auf Java und sowas wie WebKit. Allerdings würde ich statt Java direkt auf Kotlin setzen. Kann man Java schon, kann man beides parallel im gleichen Programm einsetzen. Neben Python schaue ich mir Kotlin gerade an.
https://de.wikipedia.org/wiki/Beautiful_Soup
https://de.wikipedia.org/wiki/Kotlin_(Programmiersprache)
https://www.ionos.de/digitalguide/websites/web-entwicklung/kotlin-tutorial/
Um die gescrapten Inhalte dann unterzubringen, bietet es sich an direkt eine entsprechende Datenbank aufzusetzen. Ich persönlich favorisiere da PostgreSQL. Aber für den Anfang spielt das eigentlich keine Rolle. Man kann auch MySQL oder wenn man eine kopierbare Datei ohne Server bevorzugt SQLight nehmen.
https://de.wikipedia.org/wiki/PostgreSQL
https://www.ionos.de/digitalguide/server/knowhow/postgresql/
https://de.wikipedia.org/wiki/MySQL
https://de.wikipedia.org/wiki/SQLite
Viele Grüße,
Zwenn
Anzeige
AW: Internetseite mit Anmeldung öffnen
20.04.2020 21:11:10
Jenny
Hallo Zwenn,
jetzt soll der Chromium Edge kommen.
Verstehe ich dich also richtig, solange trotzdem weiterhin der IE vorhanden ist und der IE auch weiterhin von der Seite unterstützt wird, brauch ich mir um meine Makros keine Sorgen machen?
Danke für die ausführliche Erklärung.
Jenny
AW: Internetseite mit Anmeldung öffnen
21.04.2020 00:14:39
Zwenn
Hallo Jenny,
so sehe ich es, ja. Allerdings lässt sich schwer abschätzen, wie lange der IE noch die von Dir in Deinen Makros angesprochenen Seiten verarbeiten kann. Noch schwerwiegender finde ich aber, dass sich nicht abschätzen lässt, wie lange Microsoft es noch für sinnvoll hält den IE mit auszuliefern.
Ich habe keine Ahnung, wie tief Komponenten des IE noch ins Windows Betriebssystem integriert sind. Unter XP konnte man den IE z.B. gar nicht wirklich deinstallieren, weil dann andere Sachen gar nicht mehr funktioniert hätten.
Aber da wird uns direkt in den nächsten Tagen nix ins Haus stehen. Das ist ein schleichender Prozess, der vermutlich noch etwas dauert. Man kann eben nur nicht sagen, wie lange "etwas" noch ist, bis es unerträglich wird über den IE etwas aus einer Seite auslesen zu wollen. Ich nutze den aber nach wie vor auch selbst noch dafür. Aber wie gesagt, ich schaue mich nach Alternativen um. Das hat allerdings auch noch andere Gründe, die etwas damit zu tun haben, wie ich die gewonnenen Daten verarbeiten möchte.
Viele Grüße,
Zwenn
Anzeige

12 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige