Anzeige
Archiv - Navigation
1748to1752
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

Internet Explorer Button ansprechen

Internet Explorer Button ansprechen
28.03.2020 18:05:52
Eric
Hallo Excel Forum,
ein Nutzer soll eine automatisiert erstellte Email erstellen und versenden können. Die notwendige Email Adresse soll zuvor über eine Webseite auf ihre Gültigkeit hin überprüft werden.
Die betreffende Webseite enthält ein Textfeld für die Eingabe der Email Adresse und eine Click Button. Den Click Button kann ich allerdings nicht ansprechen, weil ich ihn nicht "zu greifen" bekomme. Die Fehlermeldungen lauten "Automatisierungsfehler" oder "Objektvariable nicht festgelegt".
Die beiden relevanten Zeilen zur Behandlung des Click Button lauten:


Folgende Versuche ergeben einen Fehler.
Set IE = CreateObject("Internet.Application")
With IE
Set x = .getElementsByID("form_id").Item(0)
Set x = .getElementsByID("go").Item(0)
Set x = .getElementsByTagName("form_id").Item(0)
End With
Set IE = Nothing
Auffallend ist, dass der Click Button ein Bild mit der Aufschrift "go" zu sein scheint.
Hat der "Bild"-Button den Zweck, dass man ihn gar nicht erst abfragen kann, weil es kein Standardelement ist, welches sich abfragen ließe?
Alle Seiten, die ich zu diesem Thema besucht habe, hatten sich immer mit einer abfragbaren Kategorie der Methoden ".getElementsBy..." beschäftigt... Damit wäre ich zurecht gekommen, wenn ich die ID oder den ClassName oder den TagName des Button kennen würde.
Kann mir aus dem Forum eventuell jemand zu diesem Thema helfen?
Ich freue mich über Eure Antworten und bedanke mich ganz herzlich im Voraus bei Euch!
Gruß Eric

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Internet Explorer Button ansprechen
28.03.2020 18:17:25
Eric
Nachtrag zu "Internet Explorer Button ansprechen"
Statt "Daten absenden" waren Informationen zum Click Button gemeint gemeint:
* name="form_id", type="hidden", id="form_id", value="Kej7Ta/BZHU="
* src="btn_go.gif", id="go", type="image"
Gruß Eric
AW: Internet Explorer Button ansprechen
28.03.2020 19:55:30
volti
Hallo Eric,
ohne das jetzt groß analysiert zu haben fällt mir folgendes dazu ein:
Eine ID muss einmalig/eindeutig sein, deshalb kann Dein Code m.E. so nicht funktionieren:
Set x = .getElementsByID("form_id").Item(0)
Es müsste so heißen: Set x = .getElementByID("go"), wobei hier "go" die ID wäre. Wenn Du die ID nicht kennst, schau doch mal in den Web-Site-Quellcode rein.
Set x = .getElementsByTagName("form_id").Item(0)
Einen Tag "form_id" kenne ich nicht, vielleicht solltest Du input oder button versuchen.
Set x = .getElementsByTagName("button")(0)
viele Grüße
Karl-Heinz
Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 10:25:51
Eric
Hallo volti,
ich danke Dir für Deinen Hinweis. Ich habe es auch soeben ausprobiert... Leider ohne Erfolg.
Diese Daten hatte ich dem Quellcode entnommen:
* name="form_id", type="hidden", id="form_id", value="Kej7Ta/BZHU="
* src="btn_go.gif", id="go", type="image"
Versuch 1: Set x = .getElementByID("go")
Fehler in Zeile: Set x = .getElementByID("go")
Fehlermeldung: "Objekt unterstützt diese Eigenschaft oder Methode nicht"
Versuch 2: Set x = .getElementsByTagName("button")(0)
Fehler in Zeile: x.Click
Fehlermeldung: "Objektvariable oder With-Blockvariable nicht festgelegt"
Versuch 3: Set x = .getElementsByID("form_id")
Fehler in Zeile: Set x = .getElementsByID("form_id")
Fehlermeldung: "Objekt unterstützt diese Eigenschaft oder Methode nicht"
Versuch 4: Set x = .getElementsByTagName("form_id")(0)
Fehler in Zeile: Fehler in Zeile: x.Click
Fehlermeldung: "Objektvariable oder With-Blockvariable nicht festgelegt"
Versuch 5: Set x = .getElementsByTagName("image")(0)
Keine Fehlermeldung
Statt aber die eingegebene Email Adresse auszuwerten, wird auf die Hauptseite zurück navigiert.
Die Seite heißt: https://centralops.net/co/EmailDossier.aspx
Ich hoffe, Du kannst mir eventuell noch einmal helfen oder vielleicht bewerten, ob der "go" Button überhaupt angesteuert werden kann... Mir kommt es beinahe so vor als wäre der bewusst vor Zugriff geschützt worden.
Vielen Dank vorab!
Gruß Eric
Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 11:21:32
volti
Hallo Eric,
schau mal, ob Du hiermit weiterkommst.

Sub Web_Test()
 Dim oNode As Object
 With CreateObject("InternetExplorer.Application")
  .Navigate "https://centralops.net/co/EmailDossier.aspx"
  While Not oIE.ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  .Visible = True
  Set oNode = .document.getElementById("email")
  If Not oNode Is Nothing Then oNode.value = "Karl-Heinz.voltmann@t-online.de"
  Set oNode = .document.getElementById("go")
  If Not oNode Is Nothing Then oNode.Click
  MsgBox "Erfolgreich", vbInformation, "Test"
  .Quit
 End With
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 11:25:53
volti
Hallo, war noch ein kleiner Fehler reingerutscht:

Sub Web_Test()
 Dim oNode As Object
 With CreateObject("InternetExplorer.Application")
  .Navigate "https://centralops.net/co/EmailDossier.aspx"
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  .Visible = True
  Set oNode = .document.getElementById("email")
  If Not oNode Is Nothing Then oNode.value = "muster@web.de"
  Set oNode = .document.getElementById("go")
  If Not oNode Is Nothing Then oNode.Click
  MsgBox "Erfolgreich", vbInformation, "Test"
 End With
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 11:38:38
Eric
Hallo Volti,
das ist die Lösung!
Ich hatte zwei Fehler gemacht. Der erste Fehler war, dass ich jedes Mal ".getElementSByID("go")" statt ".getElementByID("go")" geschrieben hatte. Aber auch, wenn das gestimmt hätte, wäre ich über das anschließende ".Item(0)" gestolpert.
Ganz herzlichen Dank!
Beim Rumprobieren bin ich auf eine andere Webseite zur Email Adressen Überprüfung gestoßen. Dort gibt es den Button "Prüfen". Im Quelltext dieser Seite steht über diesen Button lediglich type="submit" und value="Prüfen".
Rein aus Interesse, kann man diesen Button nur mit den Angaben type="submit" und value="Prüfen" ebenfalls ansprechen?
Danke vorab und noch einen schönen Sonntag!
Gruß Eric
Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 12:10:50
volti
Hallo Eric,
das ganze ist ja in eine Form eingebettet. Leider sind meine Aktivitäten in diesem Bereich schon über 10 Jahre her, ich erinnere mich aber, dass ich früher auch über Form.submit das Formblatt abgeschickt hatte.
Den Button selbst kann man m.W. nicht über .value oder type ansprechen, bin mir bei type allerdings nicht ganz sicher.
Aber für eine gesicherte Aussage müsste ich schon selbst da mal gucken...
Zum Abschluss hier noch mal eine Idee..(vielleicht zur weiteren Anregung)

Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub EMailAddressTest()
 MsgBox CheckEMailAddress("muster@web.de")
End Sub
Function CheckEMailAddress(eMailText As String) As String
'Check diese eMail-Adresse
 Dim oNode As Object, i As Integer
 With CreateObject("InternetExplorer.Application")
  .Navigate "https://centralops.net/co/EmailDossier.aspx"
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  .Visible = False
  Set oNode = .document.getElementById("email")
  If Not oNode Is Nothing Then oNode.value = eMailText
  Set oNode = .document.getElementById("go")
  If Not oNode Is Nothing Then oNode.Click
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  For i = 1 To 100
   Sleep 100: DoEvents
   Set oNode = .document.all.tags("table")(4)
   If Not oNode Is Nothing Then
     CheckEMailAddress = eMailText & ":" & vbCrLf & oNode.Rows(0).Cells(1).innerText
     Exit For
   End If
  Next i
  .Quit
 End With
End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 12:29:13
Eric
Hallo an alle Unterstützer,
vielen Dank Euch allen!
Ich komme jetzt damit zurecht!
Eine Frage bleibt... Kann man einen Button trotz nur type="submit" und value="Prüfen" auch ansteuern?
Das wird mir bestimmt mal wieder über den Weg laufen...
Allen hier Aktiven einen schönen Sonntag!
Gruß Eric
AW: Internet Explorer Button ansprechen
29.03.2020 12:51:39
Eric
Hallo Volti,
ich habe Deinen Code mit der Kernel32 Zeitvorgabe getestet... Leider nicht ganz fehlerfrei.
Mich lässt das Thema mal wieder nicht los und vielleicht magst Du nochmal schauen...
Die zweite Webseite lautet: http://www.aboutip.de/mail.php
Dort dann der Button mit der Aufschrift "Prüfen"... Findest Du für den Kameraden auch eine Lösung?
Wäre super... Ich danke Dir im Voraus für Deine Geduld und Unterstützung!
Gruß Eric
Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 13:18:09
volti
Hallo Eric,
hier mal ein Versuch für Deine zweite WEB-Site. Das Ansprechen passiert in diesem Fall über die Tags und der entsprechenden Nummer.
Das Ergebnis steht dann in der Folgeseite im ersten <P>-Tag (Index 0). ANsprechen über ID ist ja nicht möglich...
Probiere es halt mal aus:
BTW: Ich hatte übersehen, dass Du "vor 2013" als Version angegeben hattest. In diesem Code habe ich deshalb den Sleep-Befehl für 32 und 64 Bit ausgelegt.

Option Explicit
#If VBA7 Then
 Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
 Private Declare  Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub EMailAddressTest()
 MsgBox CheckEMailAddress("muster@web.de")
End Sub
Function CheckEMailAddress(eMailText As String) As String
'Check diese eMail-Adresse
 Dim oNode As Object, i As Integer
 With CreateObject("InternetExplorer.Application")
  .Navigate "http://www.aboutip.de/mail.php"
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  .Visible = False
  Set oNode = .document.all.tags("input")(0)
  If Not oNode Is Nothing Then oNode.value = eMailText
  Set oNode = .document.all.tags("input")(1)
  If Not oNode Is Nothing Then oNode.Click
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  Set oNode = .document.all.tags("P")(0)
  For i = 1 To 100
   Sleep 100: DoEvents
   Set oNode = .document.all.tags("P")(0)
   If Not oNode Is Nothing Then
     CheckEMailAddress = oNode.innerText
     Exit For
   End If
  Next i
  .Quit
 End With
End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 13:46:07
volti
Hallo,
hier noch etwas kürzer....

Sub EMailAddressTest()
 MsgBox CheckEMailAddress("mustermann@web.de")
End Sub
Function CheckEMailAddress(eMailText As String) As String
'Check diese eMail-Adresse
 Dim oNode As Object, i As Integer
 With CreateObject("InternetExplorer.Application")
  On Error Resume Next
  .Navigate "http://www.aboutip.de/mail.php"
  While Not .ReadyState = 4: DoEvents: Wend           'Warten bis Seite geladen ist
  .document.all.tags("input")(0).value = eMailText
  .document.all.tags("input")(1).Click
  For i = 1 To 100
   Sleep 100: DoEvents
   CheckEMailAddress = .document.all.tags("P")(0).innerText
   If CheckEMailAddress &LT;&GT; "" Then Exit For
  Next i
  .Quit
 End With
End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Internet Explorer Button ansprechen
29.03.2020 16:18:17
Eric
Hallo Volti,
hurra, es funktioniert! Klasse!
Woher hast Du das gewusst?
".document.all.tags("input")(0).value = eMailText"
".document.all.tags("input")(1).Click"
Im Quelltext steht davon nichts, oder?
Diese Schleife verstehe ich auch nicht... Was passiert da?
For i = 1 To 100 'Durchlaufe 100 Mal... Okay, aber warum? Und warum nicht 200 oder 1000 Mal?
Sleep 100: DoEvents 'Pause für 100 Millisekunden... Warum? DoEvents... Berechnungen der Webseite?
CheckEMailAddress = .document.all.tags("P")(0).innerText 'Warum "P"? P wie Prüfen?
If CheckEMailAddress "" Then Exit For 'Beende Schleife, wenn Function einen Wert enthält?
Next i
Funktionieren tut alles!
Vielen Dank, Volti! Dir noch einen schönen Sonntag!
Gruß Eric
AW: Internet Explorer Button ansprechen
29.03.2020 16:18:36
Eric
Hallo Volti,
hurra, es funktioniert! Klasse!
Woher hast Du das gewusst?
".document.all.tags("input")(0).value = eMailText"
".document.all.tags("input")(1).Click"
Im Quelltext steht davon nichts, oder?
Diese Schleife verstehe ich auch nicht... Was passiert da?
For i = 1 To 100 'Durchlaufe 100 Mal... Okay, aber warum? Und warum nicht 200 oder 1000 Mal?
Sleep 100: DoEvents 'Pause für 100 Millisekunden... Warum? DoEvents... Berechnungen der Webseite?
CheckEMailAddress = .document.all.tags("P")(0).innerText 'Warum "P"? P wie Prüfen?
If CheckEMailAddress "" Then Exit For 'Beende Schleife, wenn Function einen Wert enthält?
Next i
Funktionieren tut alles!
Vielen Dank, Volti! Dir noch einen schönen Sonntag!
Gruß Eric
AW: Internet Explorer Button ansprechen
29.03.2020 17:03:29
volti
Hallo Eric,
hier noch eine kleine Erklärung:
Wenn ein Element nicht über die ID ansprechbar ist, dann muss man ein Array zurückgeben lassen. Entweder über die Tags, den Namen oder den Klasse. Das musst Du selbst nach Rückblick in den Code entscheiden.
Bei Rückgabe eines Arrays kannst Du über den Index ein Element rausfischen.
Da 1. Input-Element ist die eMail, das zweite der Button (also Index-Nummer 0 und 1)
Die Schleife von 1 bis 100 habe ich nur eingebaut, um Laufzeitfehler auszumerzen. Irgendwie war das gesuchte Element, (hier das P-Tag) noch nicht gefüllt und ich habe alle 100 mSec nachgeschaut, ob es gefüllt ist. Spätestens nach 10 Sekunden sollte aber ein Abbruch erfolgen und nicht in alle Ewigkeit weitergeprüft werden.
Das <P>-Tag ist ein Absatz-Tag. Im ersten P-Tag (index=0) steht unser gewünschter Text z.B. "bad address", den ich dann über die Funktion zurückgegeben habe.
Hoffe, es ist ein wenig verständlicher jetzt.
Dir auch eine schönen Restsonntag
VG KH
AW: Internet Explorer Button ansprechen
29.03.2020 11:42:40
Eric
Hallo Volti,
das ist die Lösung!
Ich hatte zwei Fehler gemacht. Der erste Fehler war, dass ich jedes Mal ".getElementSByID("go")" statt ".getElementByID("go")" geschrieben hatte. Aber auch, wenn das gestimmt hätte, wäre ich über das anschließende ".Item(0)" gestolpert.
Ganz herzlichen Dank!
Beim Rumprobieren bin ich auf eine andere Webseite zur Email Adressen Überprüfung gestoßen. Dort gibt es den Button "Prüfen". Im Quelltext dieser Seite steht über diesen Button lediglich type="submit" und value="Prüfen".
Rein aus Interesse, kann man diesen Button nur mit den Angaben type="submit" und value="Prüfen" ebenfalls ansprechen?
Danke vorab und noch einen schönen Sonntag!
Gruß Eric
Internet Explorer Button ansprechen
29.03.2020 11:03:28
Anton
Hallo Eric,
ersetze With IE gegen With IE.Document
mfg Anton
AW: Internet Explorer Button ansprechen
29.03.2020 11:18:17
Eric
Hallo Anton,
auch an Dich meinen großen Dank für Deine Unterstützung.
Der Code sieht so aus:
With IE.Document
Do: Loop Until .ReadyState = "complete"
Set inEmail = .getElementsByName("email").Item(0) 'Kein Problem
inEmail.Value = "muster@muster.com"
Set clickButton = .getElementsByID("Prüfen") 'HIER IST DER STÄNDIG AUFTRETENDE FEHLER
clickButton.Click
End With
Was tun mit einem Button, mit dessen Daten im Quellcode der Webseite nichts anzufangen ist?
Es gibt noch eine andere Seite zum Zweck der Email Adressen Überprüfung. Da gibt es einen "echten" Button, kein Image zum Anklicken, sondern eine richtige Schaltfläche mit der Aufschrift "Prüfen".
Auch hier wieder dasselbe im Quellcode dieser zweiten Webseite. Der Button wird nur erwähnt mit "type="submit" und value="Prüfen".
Wie komme ich der Schaltfläche nur bei? Oder geht das vielleicht gar nicht?
Vielen Dank!
Gruß Eric
AW: Internet Explorer Button ansprechen
29.03.2020 11:29:04
volti
Hallo Eric,
.getElementsByID("Prüfen")
Das "s" muss weg bei ID-Abfragen. Ich hatte ja schon geschrieben, dass es nur eine ID gibt...
.getElementByID("Prüfen")
VG KH

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige