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

XMLHTTP - ResponseText aktualisieren

XMLHTTP - ResponseText aktualisieren
08.12.2022 15:07:24
Speedy
Hallo Forum,
ich erzeuge mittels MSXML2.XMLHTTP und responseText ein htmlDocument, da ich administrativ kein Internet Explorer Application öffnen kann.
Das klassische und auch ehemals funktionierende:

Set ieApp = CreateObject("InternetExplorer.Application")
funktioniert nicht mehr.
Die alternative Lösung war das html-Dokument über die Funktion:

Function DataRead(Optional Link As String = "", _
Optional ByRef XMLReqAnfrage As MSXML2.XMLHTTP60)
Dim XMLReq As MSXML2.XMLHTTP60
Dim htmlDoc As New MSHTML.htmlDocument
Dim HTMLLinks As MSHTML.IHTMLElementCollection
Dim HTMLLink As MSHTML.IHTMLElement
Dim Hy As Hyperlink
If UCase(TypeName(XMLReqAnfrage)) = "NOTHING" And Link  "" Then
Set XMLReq = New MSXML2.XMLHTTP60
XMLReq.Open "Get", Link, False
Set XMLReqAnfrage = XMLReq
XMLReq.send
ElseIf Link = "" Then
Set DataRead = Nothing
Exit Function
Else
Set XMLReq = aktXMLReq
End If
Do Until XMLReq.Status = 200
Sleep 100
Loop
htmlDoc.body.innerHTML = XMLReq.responseText
Set DataRead = htmlDoc
End Function
auszulesen... funktioniert
Jetzt habe ich aber festgestellt, dass die Seite noch in Englisch angezeigt wird...
Hier kann ich über eine Schleife nach dem entsprechenden "HTMLSelectElement" suchen und es mittels

For Each Element In my_Elements.all
If InStr(1, UCase(Element.outerText), "DEUTSCH")  0 And _
Element.Selected = False and _
TypeName(Element) = "HTMLSelectElement" Then
Element.Selected = True
End If
Next Element
auch umschalten. Nur ändert das ja nichts an meinem eingelesenen responseText.
Gibt es eine Möglichkeit dies:
1. im Vorfeld schon auf Deutsch umzustellen oder
2. das htmlDocument über das Event "onchange" zu aktualisieren oder
3. das MSXML2.XMLHTTP60 als globale Variable nach der Aktualisierung (die Frage wäre hier wie ich dieses aktualisiere) neu einzulesen
- Senden von Parameteren mittels MSXML2.XMLHTTP60.Open "POST", ...
Hier komme ich einfach nicht weiter ... :-(

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XMLHTTP - ResponseText aktualisieren
08.12.2022 15:20:37
Zwenn
Hallo Speedy,
generell ist xhr (XML HTTP Request, den Du mit MSXML2.XMLHTTP60 verwendest) statisch. Das bedeutet, Du kannst genau ein Dokument vom WebServer abfragen und dieses ist und bleibt dann genau so, wie es ist. Du kannst darin keinen Button anklicken, keine Auswahl in einem Dropdown auswählen oder sonst etwas machen, auf das Du eine Reaktion erwartest. Also, kannst Du schon, nur xhr ist nicht interaktiv und es passiert dann einfach nix, weil es keine weitere Kommunikation mit dem WebServer gibt. Auch JavaScript wird nicht ausgeführt.
Um sich das anzusehen müsstest Du den Link angeben. Ob sich da was über POST statt GET regeln lässt kann man so nicht sagen. Das kommt darauf an, was im Hintergrund passiert, wenn im Browser die Sprache gewechselt wird. Vielleicht kann man die deutsche Version der Seite auch gar nicht über xhr abrufen. Dann bliebe noch der Weg über SeleniumBasic. Das muss allerdings installiert werden, was Du auf Deinem Arbeitsrechner evtl. nicht darfst.
Viele Grüße,
Zwenn
Anzeige
AW: XMLHTTP - ResponseText aktualisieren
08.12.2022 15:29:34
Speedy
Hallo Zwenn,
erst einmal danke und Hut ab für die rassannt schnelle Antwort... Auch wenn diese mir nicht so gefällt, ich diese aber schon erwartet habe.
Da die Hoffnung aber zum Schluss stirbt hier mal der Link:
https://www.sapdatasheet.org/abap/func/
vielen Dank im Voraus...
AW: XMLHTTP - ResponseText aktualisieren
08.12.2022 17:37:24
Zwenn
Also die Sprache wird über ein Cookie gesetzt und das geht nicht über xhr, wie es aussieht. Ich habe selber recherchieren müssen und bin auf eine Lösung über einen WinHTTP Request gekommen. Dies ist ein Minimalbeispiel. Wenn Du im Direktfenster ganz nach oben scrollst (in der IDE mit Strg+G aufrufen), solltest Du den HTML Code für Eintrag 482 sehen (der Rest darüber wird nicht mehr im Direktfenster angezeigt, wurde aber geladen) und da siehst Du, dass als Erklärung Puffer initialisieren statt Initialize Buffer  drin steht. Also Deutsch.

Sub SAP()
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", "https://www.sapdatasheet.org/abap/func/", True
.setRequestHeader "Cookie", "sap-desc-langu=D"
.send
.WaitForResponse
Debug.Print .responseText
End With
End Sub

Anzeige
AW: XMLHTTP - ResponseText aktualisieren
09.12.2022 09:46:05
Speedy
Super... danke
werde es zeitnah testen und noch einmal ein Feedback geben...
Danke...
AW: XMLHTTP - ResponseText aktualisieren
09.12.2022 10:38:29
Speedy
Super... funktioniert einwandfrei...
Noch einmal Tausend Dank
Ergebnis für das einlesen sieht nun so aus:

Function DataRead(Optional Link As String = "")
Dim my_winhttpReq As WinHttpRequest
Set my_winhttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
With my_winhttpReq
.Open "GET", Link, True
.setRequestHeader "Cookie", "sap-desc-langu=D"
.send
.waitForResponse
htmlDoc.body.innerHTML = .responseText
End With
Set DataRead = htmlDoc
End Function
Danke
Anzeige
AW: XMLHTTP - ResponseText aktualisieren
09.12.2022 10:45:46
Speedy
Sorry...
kleine Korrektur an der Funktion:

Function DataRead(Link As String)
Dim my_winhttpReq As WinHttpRequest
Dim htmlDoc As New htmlDocument
Set my_winhttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
With my_winhttpReq
.Open "GET", Link, True
.setRequestHeader "Cookie", "sap-desc-langu=D"
.send
.waitForResponse
htmlDoc.body.innerHTML = .responseText
End With
Set DataRead = htmlDoc
End Function
hatte vergessen htmlDoc zu dimensionieren :-)
so geht's

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige