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

Http Request / Link nicht vorhanden

Http Request / Link nicht vorhanden
22.06.2019 19:59:46
Marc
Hallo Forumsgemeinde,
ich ziehe mir mittels Http Request eine spezielle Seite bei Yahoo (IE11 wird von Yahoo nicht mehr vollständig unterstützt) um einen ganz bestimmten Link innerhalb des HTML-Codes zu bekommen über den ich mir die historischen Dividenen als csv-Datei ziehen kann. Wenn ich die Seite in Firefox öffne sehe ich, dass der Link vorhanden ist aber wenn ich mir den HTML-Code über den Http-Request ziehe ist er nicht vorhanden.
Mit dem Internet Explorer war es immer so, dass ich zunächst die Cookie Abfrage bestätigen musste und der Link bei der ersten Iteration nicht auffindbar war. Ich musste immer ein zweites Mal iterieren mit Hilfe einer Schleife dann hab ich den Link bekommen. Allerdings bin ich nun etwas unsicher ob ich mit dem Http-Request ebenfalls eine Cookie Abfrage bestätigen muss. ?
Sub HttpRequest()
' Unix Datum (Daten) festlegen
Dim Startdatum As Date
Dim Enddatum As Date
Dim UnixStart As Long
Dim UnixEnd As Long
Startdatum = "1.1." & Year(Date) - 10
UnixStart = DateDiff("d", "1.1.1970", Startdatum) * 86400
Enddatum = Date
UnixEnd = DateDiff("d", "1.1.1970", Enddatum) * 86400
' Http Request erzeugen
Dim xml As Object
Dim Ticker As String
Ticker = "DAI.DE"
Set xml = CreateObject("MSXML2.XMLHTTP.6.0")
xml.Open "GET", "https://de.finance.yahoo.com/quote/" & Ticker & "/history?period1=" &  _
UnixStart & "&period2=" & UnixEnd & "&interval=div%7Csplit&filter=div&frequency=1d", False
Debug.Print "https://de.finance.yahoo.com/quote/" & Ticker & "/history?period1=" & UnixStart & " _
&period2=" & UnixEnd & "&interval=div%7Csplit&filter=div&frequency=1d"
xml.send
Dim html As Object
Set html = CreateObject("htmlfile")
html.body.innerHTML = xml.responseText
' Downloadlink für Dividenden suchen
Dim yy As Long
Dim Url2 As String
For yy = 0 To html.Links.Length - 1
If InStr(1, html.Links(yy).href, "div&crumb") > 0 Then
Url2 = html.Links(yy).href
End If
Next yy
Debug.Print Url2
End Sub

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Http Request / Link nicht vorhanden
22.06.2019 21:33:42
Zwenn
Hallo Marc,
ich habe mal den HTML-Quellcode in einer Datei gespeichert und diese anschließend angeschaut. Der Link ist nicht enthalten. Wenn man die HTML-Datei im FF öffnet, sieht sie der direkt geladenen Version im IE sehr ähnlich. Es ist also naheliegend, dass die Seite zwar nicht über den IE geöffnet wird, dass der HTTP Request aber genau die gleiche Browser Engine verwendet. Damit scheinst Du also vor dem gleichen Problem zu stehen, dass Yahoo inzwischen Techniken verwendet, die mit dieser Engine einfach nicht mehr verarbeitet werden können.
Leider habe ich auch keine andere Idee, wie Du das über VBA lösen könntest.
Viele Grüße,
Zwenn
Anzeige
AW: Http Request / Link nicht vorhanden
22.06.2019 21:46:31
Marc
Hallo Zwenn,
das klingt erstmal nicht erheiternd denn ich muss dieses Makro dringend wieder gangbar machen. =)
Könnte es nicht sein, dass es nur das Problem mit der Cookie Abfrage ist? Es war zuvor mit dem IE11 wie gesagt so, dass der Link immer erst bei der zweiten Iteration verfügbar war nachdem ich die Cookieabfrage bestätigt hatte. Wenn ich mit Firefox das Element im Browser untersuche sehe ich, dass der Link nach wie vor als href Element gekennzeichnet vorhanden ist.
Muss man bei einem Http-Request ebenfalls eine Cookie Abfrage bestätigen?
AW: Http Request / Link nicht vorhanden
22.06.2019 21:55:46
Zwenn
Ja,
im FF wird der Downloadlink direkt angeboten und ist auch im HTML-Quellcode zu finden. Das hatte ich vorher extra geprüft.
Unter Windows 10 und IE 11 kann ich die Coockie Abfrage gar nicht mehr wegklicken. Die bleibt einfach am unteren Rand stehen, egal wo ich hinklicke. Ein weiteres Laden der Seite schafft auch keine Abhilfe und bringt auch den Link nicht wieder hervor.
Vielleicht ist das ein guter Ansatz, um sich mal mit Python zu beschäftigen. Da sollten solche Abfragen völlig unabhängig von irgendwelchen gängigen Browser Engines funktionieren. Damit habe ich mich aber leider auch noch nicht näher beschäftigt. Ich denke aber, dass es sich anbietet, weil Du ja "nur" die CSV-Datei runterladen willst.
Viele Grüße,
Zwenn
Anzeige
AW: Http Request / Link nicht vorhanden
22.06.2019 22:12:36
Marc
Sollte ich keine Lösung mit VBA finden werde ich tatsächlich zu Phyton oder einer anderen Sprache übergehen müssen aber ich denke es gibt noch ein kleines Missverständis.
Es ist nämlich so, dass der Link im IE11 im grundsätzlich immer sichtbar war im Quellcode, trotzdem erst bei der zweiten Iteration für das Makro verfügbar war.
Die Reihenfolge der Vorgänge war wie folgt:
1. Cookieabfrage bestätigen
2. Iterieren über alle href Elemente (Link wird nicht gefunden)
3. Nochmals Iterieren über alle href Elemente (Link wird gefunden)
Ich arbeite noch mit Windows 8 & IE11, zumindest bis vor ein paar Tagen =)
Anzeige
AW: Http Request / Link nicht vorhanden
22.06.2019 22:22:24
Zwenn
Hmmm,
also wie gesagt, ich habe da alles ausprobiert, was mir eingefallen ist. Im IE habe ich den Link kein einziges Mal angezeigt bekommen. Von daher gesehen gibt es meinerseits kein Missverständnis. Ich habe es jetzt nur unter Windows 10 testen können im Moment.
Gruß,
Zwenn
AW: Http Request / Link nicht vorhanden
22.06.2019 22:29:10
Marc
Im IE11 wird er auch nicht emhr angezeigt, das ist absolut korrekt. Ich will aber auf etwas anderes hinaus. So wie der Link im IE11 zuvor grundsätzlich erst bei der zweiten Iteration gefunden wurde, so könnte dies auch beim Http-Request der Fall sein. Der Umstand, dass dies so war, hatte mit der Cookieabfrage zu tun, die vor der ersten iteration stattfand.
Deshalb auch meine Frage ob diese Cookieabfrage auch bei einem Http-Request bestätigt werden muss bzw. auftaucht. ?
Anzeige
AW: Http Request / Link nicht vorhanden
22.06.2019 23:59:45
Zwenn
Hallo Marc,
um es noch einmal ganz deutlich zu sagen:
Ob du die Seite über den IE aufrufst oder über den HTTP-Request spielt keine Rolle. Es wird die gleiche Browser-Engine verwendet. Also auch für den HTTP-Request die Engine des IE. Deshalb passiert bei beiden genau das gleiche.
Viele Grüße,
Zwenn
AW: Http Request / Link nicht vorhanden
23.06.2019 10:28:14
Marc
Guten Morgen Sven,
für mich klang das zunächst so als wärst Du nicht sicher ob beide die gleiche Browser-Engine verwenden aber wenn dem so ist dann ist mein Vorhaben den Link zu bekommen natürlich hinfällig.
Allerdings kam mir noch ein letzter Gedanke jetzt. Und zwar dürfte der Link immer nach dem gleichen Schema aufgebaut sein. Ich sehe, dass der Link sowohl Startdatum, Enddatum als auch Dividendenintervall enthält. Wenn ich den Link für meine Anfragen dynamisch anpasse und in den Http-Request packe sollte ich die csv-Datei ziehen können oder?
Allerdings weiß ich nicht welche xml-Methode ich verwenden muss um die csv-Datei dann in ein Workbook zu bekommen. Folgendes würde ich vermuten:
Dim WB2 As Workbook
Set WB2 = Workbooks.Open(xml.responseStream)

Anzeige
AW: Http Request / Link nicht vorhanden
23.06.2019 11:37:18
mumpel
Gibt es von Yahoo keine Dokumentation, welche die Vorgehensweise des Abrufs beschreibt? Vielleicht gibt es ja eine Abrufmethode direkt für CSV-Dateien.
BTW:
Ist Yahoo der einzige Anbieter? Vielleicht hast Du mit einem anderen Anbieter mehr Glück!?
AW: Http Request / Link nicht vorhanden
23.06.2019 12:14:03
Marc
Hallo Mumpel,
Yahoo bietet tatsächlich die umfangreichste Datenbank und viele Anbieter von kostenlosen historischen Marktdaten gibt es nicht.
Was mich aber interessiert ist ob ich mit Hilfe von XML.RESPONSESTREAM die CSV Datei in ein Workbook packen kann. Das war meine ursprüngliche Frage. ;)
AW: Http Request / Link nicht vorhanden
23.06.2019 13:07:49
mumpel
Wenn die CSV zwischengespeichert wird kannst Du sie anschließend einlesen.
Anzeige
AW: Http Request / Link nicht vorhanden
23.06.2019 18:42:08
Marc
Sooo, ich hab jetzt mal versucht den Link direkt über den Http-Request aufzurufen und die Datei als Textdatei abzuspeichern mit folgendem Code:
Sub HttpRequest()
' Http Request erzeugen
Dim xml As Object
Set xml = CreateObject("MSXML2.ServerXMLHTTP.6.0")
xml.Open "Get", "https://query1.finance.yahoo.com/v7/finance/download/DAI.DE?period1=1403474400& _
period2=1561240800&interval=1d&events=div&crumb=43WnmWAcccz", False
xml.send
Dim fs, a
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("E:\daimler.txt", True)
a.WriteLine (xml.responseText)
a.Close
End Sub
Die Textdatei enthält allerdings nicht die gewünschte Dividendenhistorie sondern einen Hinweis auf einen Fehler, der -wer hätte es gedacht?- scheinbar mit der Cookie Abfrage zusammenhängt. =D
{
"finance": {
"error": {
"code": "Unauthorized",
"description": "Invalid cookie"
}
}
}
Geschieht bei dem Http-Request überhaupt eine Cookieabfrage? Und kann ich diese mittels Http-Request auch bestätigen um anschließend den Link zu ziehen?
Anzeige
AW: Http Request / Link nicht vorhanden
23.06.2019 19:06:46
mumpel
So wie es aussieht kommt man um die Cookie-Abfrage nicht herum. Ein nettes Geschenk von der EU-Regierung.
AW: Http Request / Link nicht vorhanden
23.06.2019 19:19:04
Marc
Die Yahoo API wurde schon vor Jahren abgeschaltet...
Irgendeine Idee wie ich diese Cookieabfrage (falls existent) bestätigen kann?
AW: Http Request / Link nicht vorhanden
23.06.2019 19:22:27
mumpel
Was spricht dagegen für Yahoo Cookies dauerhaft zuzulassen?
AW: Http Request / Link nicht vorhanden
23.06.2019 19:51:25
Marc
Das ist doch mal eine Idee. Ich wusste nicht mal, dass es diese Option gibt. =)
Ich werde Dir berichten ob es das Problem löst.
Anzeige
AW: Http Request / Link nicht vorhanden
23.06.2019 20:07:40
mumpel
Eigentlich ist das Standard. Da Du den IE sicher nicht als Standardbrowser nutzt kannst Du die Cookies auch aktivieren. Es gibt auch für den IE "Adblock plus", damit kannst Du die Datensammelwut vielleicht etwas einschränken.
AW: Http Request / Link nicht vorhanden
23.06.2019 20:20:08
Marc
Das hat nichts gebracht und irgendwie ist es ja auch logisch denn ich mache einen Http-Request und der läuft ja gerade nicht über den Internet-Explorer. Die automatische Aktivierung der Cookies legt man aber im Internet Explorer fest oder kann man das auch irgendwo in Windows 8 machen?
Cookie setzen für Http-Request
23.06.2019 21:53:55
Marc
Wie ich jetzt aus einigen Posts bei Stack-Overflow entnehmen konnte ist es bei Http-Requests grundsätzlich so, dass der Cookie vor dem absenden des Http-Request gesetzt werden muss und die notwendigen Informationen um diesen Cookie zu setzen kann wohl dem HTML-Code der Webseite selbst entnehmen, allerdings weiß ich noch nicht wie.
Hier ist allerdings ein vielversprechender Link:
https://stackoverflow.com/questions/51992681/yahoo-finance-cookie-crumb-no-longer-working
Die Fehlermeldung welche der Ersteller des Posts erhalten hatte ist identisch mit meiner.
Anzeige
AW: Cookie setzen für Http-Request
23.06.2019 22:18:43
mumpel
Dazu muss man den Quellcode für das Cookie-Fenster kennen. Damit kann man den Code durchlaufen bis man zum Button kommt und diesen clicken lassen. Dann muss man versuchen im selben Fenster oder in der selben Browser-Session das Request abzusetzen. Beim IE ist es aber so, dass immer eine neue Session erstellt wird, in dieser dürfte das Cookie eher nicht mehr gelten.
Button-Code für das Cookie-Fenster:
<button type="submit" class="btn primary" name="agree" value="agree">OK</button>
Vielleicht wäre es besser mit dem Firefox zu arbeiten. Dafür könnte man einen VBS-Code nutzen (Die VBS-Datei mit Shell starten). Diese VBS-Datei ruft den FF auf, setzt das Cookie und anschließend in der selben Session das HTTPRequest, das Request könnte eine CSV estellen die anschließend in Excel eingelesen wird. Folgend ein Beispiel-VBS von mir (geheime Angaben habe ich aus Datenschutzgründen bzw. rechtlichen Gründen durch unsinnige Angaben ersetzt). Vielleicht hilft Dir das weiter.
Dim wshShell
Dim objFFApp
Dim strUserPath
Dim strLinkDBRiL
Dim strLinkDBRIS
Dim strLinkDBZugradar
Dim strLinkRISDBFilter

Set wshShell = WScript.CreateObject("WScript.Shell")
    strUserPath = wshShell.ExpandEnvironmentStrings("%USERPROFILE%")
Set wshShell = Nothing

strLinkDBZugradar = "firefox.exe -new-tab " & _
                    "http://www.apps-bahn.de/bin/livemap/" & _
                    "query-livemap.exe/dn?L=vs_livefahrplan&livemap=" & _
                    "yes&stationInput=8000230&pICE=1&pIC=1&showICEStops=" & _
                    "1&pRegional=1&showRegionalStops=1&showJourneyLabel=" & _
                    "1&showOptions=0"

strLinkDBRIS = "firefox.exe -new-tab " & _
               "https://beispielurl.de/beispielhttp/beispiel.xml?action=" & _
               "knotene&eins=1234567&zwei=dreis&vier=" & _
               Year(Now) & "-" & Right("0" & Month(Now), 2) & "-" & _
               Right("0" & Day(Now), 2) & "T" & Right("0" & Hour(Now), 2) & _
               ":" & Right("0" & Minute(Now), 2)

strLinkRISDBFilter = "firefox.exe -new-tab " & _
                     "https://beispielurl.de/beispielhttp/beispiel.xml?action=" & _
                     "knoten&eins=1234567&zwei=drei&vier=" & _
                     Right("0" & Day(Now), 2) & "." & Right("0" & Month(Now), 2) & "." & _
                     Right("0" & Year(Now), 2) & "&achzehn=" & _
                     Right("0" & Hour(Now), 2) & "%3A" & Right("0" & Minute(Now), 2) & _
                     "&fuenf=90" & _
                     "&sechs=sieben&acht&neun=zehn&elf=zwoelf&zdreizehn=vierzehn&feunfzehn=" & _
                     "&sechzehna=&siebzehn=Text"

strLinkDBRiL = "firefox.exe -new-tab file:///" & strUserPath & "/Desktop/" & _
               "RiL%20DB/vorschriften.html"

Set objFFApp = CreateObject("WScript.Shell")
    With objFFApp
        .Run ("firefox.exe")
        WScript.Sleep (2000)
        .Run (strLinkDBZugradar)
        .Run (strLinkDBRIS)
        .Run (strLinkDBRiL)
    End With
Set objFFApp = Nothing

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:René Holtz

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


AW: Cookie setzen für Http-Request
23.06.2019 22:39:58
Marc
Was Du zuerst beschrieben hast hatte ich heute Mittag bereits versucht ohne Erfolg. Das Cookie war nicht mehr gültig, wie Du schon richtig vermutet hast.
VBS sagt mir zunächst mal überhaupt nichts aber ich werde mir das morgen mal zu Gemüte führen und Dir Feedback geben. Vielen Dank für die Ideen. ;)
AW: Cookie setzen für Http-Request
23.06.2019 22:47:26
mumpel
VBS = Visual Basic Script. Das ist quasi der ganz kleine Bruder von Visual-Basic, und gilt als Vorgänger von PowerShell. Obwohl "Profis" heute eher mit PowerShell arbeiten.
AW: Cookie setzen für Http-Request
23.06.2019 22:57:11
mumpel
Wenn Du etwas mehr möchtest kannst Du Dir auch mal AutoIt anschauen. Damit lässt sich etwas besser programmieren. Vieles darin beruht bereits auf VBA bzw. Excel-Automation, es sind aber viele fertige Klassen dabei, und im Netzt gibt es einige weitere Klassen. Vielleicht ist da ja dafür auch etwas Gutes für Yahoo-Finance dabei oder im Internet zu finden, oder im AutoIt-Forum jemand behilflich. Ich habe AutoIt auch schon für eine Exceldatei testweise genutzt (damit kann ich eine Exceldatei so schützen, dass nur "Vollprofis" noch etwas ausrichten können).
AW: Cookie setzen für Http-Request
23.06.2019 22:25:02
mumpel
Ist das Beispiel bei StackOverflow nicht für Access? OpenRecordset kenne ich nur aus Access.
Übrigens:
23.06.2019 11:40:42
mumpel
Excel (in den aktuellen Versionen) kann Daten aus dem Web auch direkt abrufen. Tab "Daten", Gruppe "Daten abrufen und transformieren", Schaltfläche "Aus dem Web". Im Dialog kann man dann die URL eingeben. Hast Du das schon mal probiert?
AW: Übrigens:
23.06.2019 12:51:03
Marc
Hallo Mumpel,
danke für den Hinweis. Mir ist das bekannt aber bisher war ich nicht auf die Idee gekommen. Ich werde es mal versuchen. Die Funktion dürfte ja per VBA angesprochen werden können, hoffe ich zumindest, sonst bringt es mir nichts.
Können wir uns darauf einigen den ursprünglichen Betreff meines Posts beizubehalten? Ich sehe keinen Sinn darin permanent den Betreff zu ändern.
AW: Übrigens:
23.06.2019 13:08:48
mumpel
Müsste per VBA gesteuert werden können. Ich kann derzeit nicht viel am PC machen, hatte eine Hand-OP.
AW: Übrigens:
26.06.2019 21:27:39
Marc
Hallo Mumpel,
ich werde wohl die Alternative mit VbScript und Firefox umsetzen müssen denn es scheint das Einzige zu sein was Aussicht auf Erfolg hat.
Die Funktion "Daten aus dem Web" in excel ist ebenfalls nicht dazu geeignet denn diese verwendet ebenfalls den Internet Explorer.
Ob es eine Möglichkeit gibt mittels einem einzigen Http-Request einen Cookie zu setzen und die Datei zu ziehen konnte ich bislang nicht herausfinden denn alle Posts bei Stack Overflow waren für mich relativ unverständlich und zumeist nicht VBA bezogen. Von der Logik her würd eich vermuten, dass es nicht geht aber vielleicht weiß es hier ja jemand besser und verrät es mir. :)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige