Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MSXML2.XMLHTTP-Objekt parsen/ GetElementByID

Forumthread: MSXML2.XMLHTTP-Objekt parsen/ GetElementByID

MSXML2.XMLHTTP-Objekt parsen/ GetElementByID
02.04.2013 10:21:23
Arthur
Hallo VBA-Gemeinde.
Ich muss eine Intranetseite auslesen. Leider sind 'Alerts' eingebaut, sodass der direkte Weg über das Webbrowser-Objekt nicht geht. Im Forum wurde mir mit nachfolgenden Zeilen geholfen .... nur kann ich jetzt nicht mehr parsen.
Im Webbrowser ist es möglich per GetElementByID zügig in die Nähe der gewünschten Info zu springen und danach in einer kleinen Schleife an's Ziel zu kommen. Alles zu Fuß zu erledigen dauert zu lange.
Hat ein XMLHTTP-Objekt eine ähnliche Möglichkeit?
Hier der 'neue' Lösungsansatz:
Sub b()
Dim objXMLHTTP As Object
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.Open "GET", "https://www.google.de", False
objXMLHTTP.send
If objXMLHTTP.Status = 200 Then
Debug.Print objXMLHTTP.Responsetext
End If
Set objXMLHTTP = Nothing
End Sub

Hier das 'Alert'-Problem, das Minibeispiel der html-Seite:
#
#alert('Testing');
#
Gruß, Arthur

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Könntest du das nicht mit J[ava]Script oder ...
02.04.2013 15:02:10
Luc:-?
…VBScript versuchen, Arthur?
Quelltext kopieren, auswerten und ggf in entsprd Form in ein Worksheet-Objekt (nur IE!; oder was du haben willst) schreiben.
Gruß Luc :-?

AW: Könntest du das nicht mit J[ava]Script oder ...
02.04.2013 15:42:29
Arthur
Hi Luc.
Die Funktion soll in einfachem VBA eingebettet sein. Ob mir da ein Scripting hilft entzieht sich meiner Kenntnis. So umfangreich sind meine Kenntnisse nicht. Es würde mir genügen die Seite einzuladen und auswerten zu können. Leider liefert mir das 'Bordmittel' Webbrowser-Objekt keine Möglichkeit die Seite zu laden ohne sie gleich auszuführen. Und die kleine Beispielroutine liefert mir den Inhalt, leider ohne ihn halbwegs zielgerichtet auswerten zu können.
Dennoch Danke für die Gedanken.
Gruß, Arthur

Anzeige
MSXML2.XMLHTTP-Objekt parsen/ GetElementByID
02.04.2013 15:31:36
Anton
Hallo Arthur,
so vllt:
Sub b()
Dim objXMLHTTP As Object, IEApp As Object
Dim strTemp As String, strInhalt As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.Open "GET", "https://www.google.de", False
objXMLHTTP.send
If objXMLHTTP.Status = 200 Then
strInhalt = objXMLHTTP.Responsetext
strTemp = "C:\temp\temp.htm" 'anpassen
Open strTemp For Output As #1
Print #1, Replace(strInhalt, "alert", "arthur=")
Close
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate strTemp
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Document.ReadyState = "complete"
'auswerten
Set IEApp = Nothing
Kill strTemp
End If
Set objXMLHTTP = Nothing
End Sub

mfg Anton

Anzeige
AW: MSXML2.XMLHTTP-Objekt parsen/ GetElementByID
02.04.2013 15:46:56
Arthur
Hallo Anton.
Der Lösungsansatz scheint mir in der Tat zum Ziel zu führen. Nur sind mir Hilfsdateien ein kleiner Dorn auf der Festplatte. Vielleicht muss ich in diesen sauren Apfel beißen ... ohne einen Wurm zu treffen. Hätte M$ mal einen Parameter eingebaut um die Ausführung der Alerts zu unterbinden. In VBohneA gibt es sowas anscheinend.
Vielen Dank für den Lösungsgedanken.
Gruß, Arthur

Anzeige
MSXML2.XMLHTTP Daten an Webbrowser-Objekt senden
02.04.2013 15:52:47
Arthur
Hallo zusammen.
Mein Problem ist noch immer, dass eine Lösung mir die Daten mit Alert aber auswertbar bringt, die andere die Daten ohne Alert und nicht (zielgerichtet) auswertbar.
Angeregt durch Antons Lösungsvorschlag die Idee, dass es eventuell möglich ist den xml-Text direkt an das Webbrowserobjekt zu übertragen. Entsprechend dem obigen Beispiel "Webbrowser1. = objXMLHTTP.Responsetext". Aber wo ....
Gruß, Arthur

Anzeige
Daten an Webbrowser-Objekt senden
02.04.2013 16:44:58
Anton
Hallo Arthur,

Sub b()
Dim objXMLHTTP As Object, strInhalt As String
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.Open "GET", "https://www.google.de", False
objXMLHTTP.send
If objXMLHTTP.Status = 200 Then
strInhalt = objXMLHTTP.Responsetext
With Me.WebBrowser1
.Navigate "about:blank"
Do
DoEvents
Loop Until .Busy = False
.Document.body.innerhtml = strInhalt 'oder
'.Document.body.innerhtml = Replace(strInhalt, "alert", "arthur=")
End With
End If
Set objXMLHTTP = Nothing
End Sub

mfg Anton

Anzeige
*tata* - Das ist es ....
03.04.2013 10:50:06
Arthur
Hallo Anton.
Das ist es. Der kleine Umweg funktioniert. Vielen Dank für die Hilfestellung.
Gruß, Arthur.
;
Anzeige

Infobox / Tutorial

MSXML2.XMLHTTP-Objekt effektiv nutzen


Schritt-für-Schritt-Anleitung

Um das MSXML2.XMLHTTP-Objekt in Excel VBA zu verwenden, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Sub b()
       Dim objXMLHTTP As Object
       Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
       objXMLHTTP.Open "GET", "https://www.google.de", False
       objXMLHTTP.send
       If objXMLHTTP.Status = 200 Then
           Debug.Print objXMLHTTP.Responsetext
       End If
       Set objXMLHTTP = Nothing
    End Sub
  4. Code ausführen: Führe das Makro aus, um die HTML-Inhalte von der angegebenen URL abzurufen.

  5. Daten verarbeiten: Du kannst die erhaltenen Daten weiterverarbeiten, z.B. mit GetElementByID oder anderen Methoden.


Häufige Fehler und Lösungen

  • Fehler 404 - Seite nicht gefunden: Überprüfe, ob die URL korrekt ist und ob die Seite online ist.

  • Status 200 wird nicht zurückgegeben: Stelle sicher, dass die Internetverbindung funktioniert und dass die URL erreichbar ist.

  • Objekt nicht gesetzt: Achte darauf, dass du CreateObject("MSXML2.XMLHTTP") korrekt verwendest.


Alternative Methoden

Wenn das MSXML2.XMLHTTP-Objekt nicht die gewünschten Ergebnisse liefert, kannst du auch folgende Alternativen in Betracht ziehen:

  • MSXML2.ServerXMLHTTP: Dieses Objekt eignet sich besser für Serveranfragen und bietet mehr Optionen für die Authentifizierung.

    Dim objServerXMLHTTP As Object
    Set objServerXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
  • Webbrowser-Objekt: Wenn du interaktive Webseiten verarbeiten möchtest, kann das Webbrowser-Objekt in VBA nützlich sein.


Praktische Beispiele

Hier sind einige Beispiele, wie du das MSXML2.XMLHTTP-Objekt in verschiedenen Szenarien verwenden kannst:

  1. HTML-Inhalt abrufen und speichern:

    Sub SaveHTMLContent()
       Dim objXMLHTTP As Object, strInhalt As String
       Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
       objXMLHTTP.Open "GET", "https://www.example.com", False
       objXMLHTTP.send
       If objXMLHTTP.Status = 200 Then
           strInhalt = objXMLHTTP.Responsetext
           Open "C:\temp\output.html" For Output As #1
           Print #1, strInhalt
           Close #1
       End If
       Set objXMLHTTP = Nothing
    End Sub
  2. Daten an Webbrowser-Objekt senden:

    Sub LoadDataInWebBrowser()
       Dim objXMLHTTP As Object
       Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
       objXMLHTTP.Open "GET", "https://www.example.com", False
       objXMLHTTP.send
       With Me.WebBrowser1
           .Navigate "about:blank"
           Do
               DoEvents
           Loop Until .Busy = False
           .Document.body.innerHTML = objXMLHTTP.Responsetext
       End With
       Set objXMLHTTP = Nothing
    End Sub

Tipps für Profis

  • Fehlerbehandlung einbauen: Verwende On Error Resume Next und prüfe den Statuscode, um Fehler zu vermeiden.

  • Asynchrone Anfragen: Setze das dritte Argument von Open auf True, um asynchrone Anfragen zu verwenden. Dies kann die Performance verbessern, erfordert aber zusätzliche Logik zur Bearbeitung der Antwort.

  • HTTP-Header anpassen: Wenn du spezielle Header senden musst, verwende objXMLHTTP.setRequestHeader.


FAQ: Häufige Fragen

1. Wie kann ich mit GetElementByID in einer HTML-Seite arbeiten? Du kannst die HTML-Seite in einem Webbrowser-Objekt laden und dann GetElementByID verwenden, um auf bestimmte Elemente zuzugreifen.

2. Was ist der Unterschied zwischen XMLHTTP und ServerXMLHTTP? ServerXMLHTTP ist optimiert für Serveranwendungen und unterstützt Authentifizierungsmethoden, die XMLHTTP nicht unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige