AW: per VBA ein Feld aus einer Internetseite abfragen
18.06.2019 12:41:36
Zwenn
Hallo Stefan,
man kommt über den HTML-Quellcode des YouTubePlayers an die Zeit eines Videos. Auslesen kann man es mit den Werkzeugen des DOM (Document Object Model). Du musst Dir das Ergebnis nur noch da ausgeben lassen, wo Du es brauchst und evtl. eine Schleife in das Makro einbauen, damit mehrere URLs nacheinander abgeklappert werden können:
Sub YouTubeSpielZeitHolen()
Dim browser As Object
Dim url As String
Dim knotenWurzel As Object
Dim splitArray() As String
Dim spielZeit As String
'Beliebige YouTube URL auf ein Video
url = "https://www.youtube.com/watch?v=c_x4Ta3B8uI"
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Zeitstempel aus dem YouTubePlayer auslesen
'Das entsprechende div-Tag verwendet als einziges die Klasse "ytp-progress-bar "
'Dann folgen einige Attribute, von denen wir den Wert von aria-valuetext brauchen
'<div class="ytp-progress-bar "
' tabindex = "0"
' role = "slider"
' aria-Label = "Schieberegler für Suche"
' aria-valuemin = "0"
' aria-valuemax = "211"
' aria-valuenow = "1"
' aria-valuetext = "0:00 von 3:31"
' style="touch-action: none;" >
Set knotenWurzel = browser.document.getElementsByClassName("ytp-progress-bar ")(0)
If Not knotenWurzel Is Nothing Then
'Wurde das div-Tag gefunden, direkt das Attribut mit Zeitstempel
'über Split() in seine Bestandteile zerlegen
'Leerzeichen = Trennzeichen (Delimeter)
splitArray = Split(knotenWurzel.getAttribute("aria-valuetext"))
'Die Spielzeit des Videos steht nun im letzten Element des Arrays
spielZeit = splitArray(UBound(splitArray))
Else
spielZeit = "Keine Zeit ausgelesen"
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
'Spielzeit ausgeben
MsgBox spielZeit
End Sub
Viele Grüße,
Zwenn