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

Eintrag auf Website

Eintrag auf Website
19.11.2020 15:49:15
Rolf
Hallo und einen schönen Tag,
bei einer Website steht im Quelltext zum Benutzernamen:
name="value_1389537.mainContent_root_txtBenutzerkennung" size="35" style="" type="text">
Die Eingabe über VBA gelingt mit:
.document.getElementById("txtBenutzerkennung").Value = "Rapunzel"
Bei einer anderen Website gibt es kein "Id" im Quelltext:
class="ng-pristine validation-messages-border
dtl-validation-messages dtl-validation-element ng-empty
ng-invalid ng-invalid-required ng-not-modified ng-touched"
required=""
type="password"
placeholder="Passwort"
data-web-test="loginForm-password"
ng-model="vm.password"
validation-messages="">
Wie kann ich hier mittels VBA mein Passwort einfügen?
Schöne Grüße
Rolf

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eintrag auf Website
19.11.2020 16:01:01
Rolf
Hallo und einen schönen Tag,
bei einer Website steht im Quelltext zum Benutzernamen:
-input autocomplete="off" class="XText " id="txtBenutzerkennung" maxlength="35"
name="value_1389537.mainContent_root_txtBenutzerkennung" size="35" style="" type="text"-
Die Eingabe über VBA gelingt mit:
.document.getElementById("txtBenutzerkennung").Value = "Rapunzel"
Bei einer anderen Website gibt es kein "Id" im Quelltext:
-input name="password"
class="ng-pristine validation-messages-border
dtl-validation-messages dtl-validation-element ng-empty
ng-invalid ng-invalid-required ng-not-modified ng-touched"
required=""
type="password"
placeholder="Passwort"
data-web-test="loginForm-password"
ng-model="vm.password"
validation-messages=""-
Wie kann ich hier mittels VBA mein Passwort einfügen?
Schöne Grüße
Rolf
Anzeige
AW: Eintrag auf Website
19.11.2020 16:01:55
volti
Hallo Rolf,
gehe über die Klasse.
Allerdings wird hier evtl. ein Set zurückgegeben, also es könnten mehrere Objekte zu der Klasse zurückgegeben werden.
Das richtige Objekt kannst Du, ggf. experimentell oder durch Blick in den Quellcode, über den Index, beginnend bei 0 abgreifen.
 sKlasse = "ng-pristine....."
 .Document.getElementsByClassName(sKlasse)(0).value = "Rapunzel"
viele Grüße
Karl-Heinz
Anzeige
AW: Eintrag auf Website
19.11.2020 16:15:48
Rolf
Hallo-Karl Heinz,
danke für die schnelle Antwort.
Werde deinen Vorschlag sofort testen.
Viele Grüße
Rolf
AW: Eintrag auf Website
19.11.2020 16:54:21
volti
In Ergänzung:
Das Ganze geht natürlich auch z.B. über
.document.getElementsByTagName("input")(0).value="Rapunzel"
oder
.document.getElementsByName("password")(0).value="Rapunzel"
Ist vielleicht noch besser.
viele Grüße
Karl-Heinz
AW: Eintrag auf Website
19.11.2020 17:04:10
Rolf
Hallo Karl-Heinz,
auch bei den beiden neuen Vorschlägen kommt die gleiche Fehlermeldung.
Gruß Rolf
AW: Eintrag auf Website
19.11.2020 17:13:52
volti
Hallo Rolf,
das heißt nicht documents sondern document.
Der Punkt davor besagt, dass da noch die Instance des Internetexplorers vor muss oder das ganze befindet sich in einer WITH-Schleife.
Das kann ich jetzt nicht erkennen, da Du nur einen Teil des Code gezeigt hattest.
viele Grüße
Karl-Heinz
Anzeige
AW: Eintrag auf Website
19.11.2020 17:32:56
Rolf
Hallo Karl-Heinz,
im Makro hatte ich schon 'document'.
Private Sub CommandButton3_Click()
Dim sKlasse As String
Dim appIE1 As Object
Dim ieDoc As Object
Dim ieForm As Object
Set appIE1 = CreateObject("InternetExplorer.application")
With appIE1
.Resizable = True
.Visible = True
.navigate "https://de.cgmlife.com/vkb/?module=invoice#/start/"
.document.getElementsByName("password")(0).Value = "Rapunzel"
End With
Do While appIE1.Busy
Loop
Set appIE1 = Nothing
End Sub
Viele Grüße Rolf
AW: Eintrag auf Website
19.11.2020 19:21:22
volti
Hallo Rolf,
Du musst warten, bis die Seite geladen ist....
Hier ein Beispiel:
Code:
[Cc]

Private Sub CommandButton3_Click() Dim sKlasse As String Dim appIE1 As Object Dim Obj As Object Set appIE1 = CreateObject("InternetExplorer.application") With appIE1 .Resizable = True .Visible = True .navigate "https://de.cgmlife.com/vkb/?module=invoice#/start/" While Not .readyState = 4: DoEvents: Wend 'Warten bis Seite geladen ist .document.getElementsByTagname("input")(0).Value = "Maier@web.de" 'eMail .document.getElementsByTagname("input")(1).Value = "Rapunzel" 'Passwort End With Set appIE1 = Nothing End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Eintrag auf Website
19.11.2020 20:21:03
Zwenn
Hallo Rolf und Karl-Heinz,
die Textfelder sind mit HTML-Events versehen. Um sich automatisiert einloggen zu können, muss jeweils das change-Event getriggert werden. Sonst klappt das nicht. Kann man leicht ausprobieren, indem man das Triggern mal auskommentiert.
Der Username wird manchmal nicht genommen, wenn man direkt drauf los geht. Deshalb habe ich eine Sekunde Pause vor dem Setzen der Werte eingebaut. Komisches Verhalten, aber so scheint es stabil zu funktionieren.
Wie Du schon geschrieben hast Karl-Heinz, muss gewartet werden, bis die Seite geladen ist. Die Inhalte werden aber dynamisch nachgeladen, damit ist die Abfrage auf busy oder ReadyState nicht brauchbar. Ich habe eine andere Prüfung eingebaut.
Den Rest der Erklärungen habe ich als Kommentare an den Richtigen Stellen im Code untergebracht:

Private Sub CommandButton3_Click()
Dim nodeUserName As Object
Dim nodePassWord As Object
Dim nodeSelectButton As Object
With CreateObject("InternetExplorer.application")
.Resizable = True
.Visible = True
.navigate "https://de.cgmlife.com/vkb/?module=invoice#/start/"
'Die folgende Zeile müsste der vorherihgen mit navigate folgen
'Sie sorgt für das Warten, bis der IE das Dokument geladen hat
'Do While .Busy: DoEvents: Loop
'Es ist aber eine Seite mit dynamischen Inhalten
'Ob die Seite wirklich vollständig geladen ist,
'kann in einer Schleife durch die Prüfung auf das
'Vorhanden sein eines benötigten HTML Elementes
'festgestellt werden
Do
On Error Resume Next
'Wenn der Submit Button da ist, ist alles da, was benötigt wird
'(Hier kein Timeout, falls der Button nicht auftaucht)
Set nodeSelectButton = .document.QuerySelector("button[type='submit']")
On Error GoTo 0
Loop While nodeSelectButton Is Nothing
'Erst jetzt kann auf die gewünschten Elemente zugegeriffen werden
'Die beiden Textfelder sind mit HTML Events versehen, von denen
'zwei zwingend ausgelöst werden müssen. Sonst werden die Eingaben
'von der Webseite nicht erkannt und deshalb nicht verarbeitet
'Username eingeben
'Dieses Feld zickt manchmal rum, keine Ahnung warum
'Wir geben der Seite eine Sekunde Pause
Application.Wait (Now + TimeSerial(0, 0, 1))
'Als erstes das Textfeld für den Usernamen selektieren
Set nodeUserName = .document.getElementsByName("username")(0)
'Dann den Usernamen setzen
nodeUserName.Value = "Rapunzel"
'Danach das Change-Event triggern
Call TriggerEvent(.document, nodeUserName, "change")
'Passwort eingeben (gleiches Vorgehen)
Set nodePassWord = .document.getElementsByName("password")(0)
nodePassWord.Value = "lass dein Haar herunter"
Call TriggerEvent(.document, nodePassWord, "change")
'Submit Button klicken
nodeSelectButton.Click
End With
End Sub
Diese Prozedur kann verwendet werden, um beliebige HTML-Events zu triggern:

Private Sub TriggerEvent(htmlDocument As Object, _
htmlElementWithEvent As Object, _
eventType As String)
'Procedure based on a code by Anton on
'https://www.herber.de/forum
Dim theEvent As Object
htmlElementWithEvent.Focus
Set theEvent = htmlDocument.createEvent("HTMLEvents")
theEvent.initEvent eventType, True, False
htmlElementWithEvent.dispatchEvent theEvent
End Sub
Bei mir scheint der LogIn Vorgang damit zu funktionieren. Denn nach dem Klicken des Submit Button bekomme ich die Meldung, dass die eingegeben Werte falsch sind. Werden die Werte ignoriert, werden an den Textfeldern rote Hinweise angezeigt, dass die Werte gesetzt werden müssen.
Viele Grüße,
Zwenn
Anzeige
AW: Eintrag auf Website
20.11.2020 09:26:47
Rolf
Hallo Karl-Heinz, hallo Zwenn,
recht herzlichen Dank für euere Hilfe und Geduld.
Beide Ansätze brachten den gewünschten Erfolg!
In Zwenns Antwort muss ich mich noch etwas länger vertiefen, um seine Anregungen nachvollziehen zu können.
Herzliche Grüße
Rolf
AW: Eintrag auf Website
19.11.2020 16:57:45
Rolf
Hallo Karl-Heinz,
hat leider nicht geklappt.
"Die Methode 'documents' ist fehlgeschlagen" kommt als Fehlermeldung.
Meine Kenntnisse reichen nicht aus, um eine akzeptierte Methode anzugeben.
Gruß Rolf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige