Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1700to1704
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

DOM-Objekt - Nachfrage an Zwenn

DOM-Objekt - Nachfrage an Zwenn
29.06.2019 15:47:52
stef26
Hallo Zwenn,
falls du dich wieder hier im Forum um Hilfestellungen bemühst...
Ich hätte noch eine Nachfrage zu deiner Hilfe die du mir gegeben hast.
Du schreibst ich soll ein DOM Objekt aus meinem eingebundenen WebBrowser nehmen?
Ich hab die Funktion in eine Zelle geschrieben. Die URL und den Wert true eingegeben. Dachte das das ist, was die Funktion von mir will um die Laufzeit auszugeben.
Zeigt mir aber nicht`s an. Ich denke ich mach da einfach was falsch.
Könntest du mir nochmal erklären wie ich die Funktion genau anwende?
Die Funktion, über die Du die Gesamtzeit oder die verstrichene Zeit eines Videos aus dem YTP _ auslesen kannst sieht folgendermaßen aus. Sie erwartet ein DOM-Objekt, dass Du aus Deinem eingebetteten Webbrowser nimmst. Über einen Boolean-Schalter wählst Du aus, ob Du die Gesamtzeit oder die bisher verstrichene Zeit von der Funktion bekommen willst:

Public Function YouTubeSpielZeitHolen(ytpDocument As Object, vergangenOderGesamt As Boolean) As  _
_
_
String
Dim knotenWurzel As Object
Dim spielZeit As String
Dim splitArray() As String
'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 = ytpDocument.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 = Standard-Trennzeichen (Delimeter)
splitArray = Split(knotenWurzel.getAttribute("aria-valuetext"))
'Die Vergangene-Spielzeit des Videos steht im ersten Element des Arrays
'Die Gesamt-Spielzeit des Videos steht im letzten Element des Arrays
'Je nachdem, was gewünscht wird, wurde für die Auswahl false oder true
'an diese Funktion übergeben
If vergangenOderGesamt Then
'Für true = vergangene Spielzeit im ersten Arry-Element
spielZeit = splitArray(LBound(splitArray))
Else
'Für false = gesamte Spielzeit im letzten Arry-Element
spielZeit = splitArray(UBound(splitArray))
End If
End If
'Aufräumen
Set knotenWurzel = Nothing
'Spielzeit zurückgeben
YouTubeSpielZeitHolen = Trim(spielZeit)
End Function

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

Betreff
Datum
Anwender
Anzeige
AW: DOM-Objekt - Nachfrage an Zwenn
30.06.2019 20:04:06
Zwenn
Hallo Stefan,
so schwere Fragen nach einer Heimfahrt mit Stau im Flixbus von sanften 31 Grad in Lübeck in die 39 Grad Sauna Berlin ;-) Gut dass die Busse heutzutage klimatisiert sind :-)
Die URL wird nicht an die Funktion übergeben. Die hast Du ja schon in Deinem eingebetteten Webbrowser aufgerufen. Die URL hat die vorher von mir gezeigte Sub aufgerufen. Aber ein neuer Seitenaufruf hat ja nix mit Deinem schon laufenden Video zu tun. Deshalb musst Du das document aus Deinem eingebetteten Browser an die neue Funktion übergeben. Deshalb heißt der Funktionsparameter ytpDocument und ist vom Typ Object. Eine URL wäre ein String. Wie Du sehen kannst, wird in der Funktion auch kein eigener Internet Explorer mehr verwendet.
Denn das document Deines eingebetteten Webbrowsers enthält zu jeder beliebigen Zeit die bisherige Laufzeit des Videos. Die kannst Du nutzen, um die manuelle Synchronisation los zu werden. Du rufst einfach die Funktion auf, die ich Dir zur Verfügung gestellt habe und bekommst die aktuelle Zeit zurückgeliefert. Diese kannst Du sowohl für die Anzeige der Zeit, wie auch für die Anzeige des richtigen Textabschnitts verwenden. Wird zwischendurch Pause angeklickt und dann irgendwann wieder Play, stimmt die Zeit durch Aufruf dieser Funktion trotzdem immer.
Der Aufruf der Funktion für die Gesamtspielzeit des Videos:
gesamtSpielZeit = YouTubeSpielZeitHolen(Hauptmenue.WebBrowser1.document, False)

Der Aufruf der Funktion für die schon vergangene Spielzeit des Videos:
bisherSpielZeit = YouTubeSpielZeitHolen(Hauptmenue.WebBrowser1.document, True)
Beachte bitte, dass die Spielzeit als String zurückgeliefert wird.
Viele Grüße,
Zwenn
Anzeige
AW: DOM-Objekt - Nachfrage an Zwenn
01.07.2019 00:17:24
stef26
Hallo Zwenn,
vielen Dank jetzt hab ichs.
Werde es nächste Woche mal ins Tool einbauen, so dass ich nicht mehr manuell synchronisieren muss.
Vielen Dank Funktioniert super.
Ach für das Maximieren hab ich mir auch schon was überlegt. Hier werde ich über AutoIt eine Exe machen die dann auf die eine bestimmte Koordinate klickt. Muß nur die Tabelle aktualisieren und die Form an die Tabelle anpassen. Dann dürfte (zu mindest bei meiner Auflösung) der Button immer an der selben Stelle stehen. Da muß ich mich aber noch ein wenig einlesen...
Vielen Dank für deine Unterstützung
Gruß
Stefan
Anzeige
AW: Nachfrage an Zwenn
01.07.2019 01:06:13
stef26
Hallo Zwenn,
ich schwör es ist die letzte Nachfrage:-)
Ich tüftle nun an deiner Funktion rum und bring es aber nicht hin.
Ich denke du kannst das bestimmt besser.
Gibt es die Möglichkeit, wenn das holen nicht mehr funktioniert (Player Zeit verschwindet)
dass er dann zur Letzten geholten Zeit jede Sekunde hochzählt.
Und dieses mit dem nächsten holen (Zeit vorhanden) wieder überschreibt.
Dann würde die Zeit weiterlaufen, auch wenn das Holen ins leere läuft...
Scheiße ich muß morgen 5:30Uhr raus...
Gute Nacht
Gruß
Stefan
AW: Nachfrage an Zwenn
01.07.2019 13:21:52
Zwenn
Hallo Stefan,
was heißt, wenn das Zeit holen ins leere läuft? Du kannst darauf prüfen, ob die Funktion etwas zurückliefert und entsprechend reagieren:

bisherSpielZeit = YouTubeSpielZeitHolen(Hauptmenue.WebBrowser1.document, True)
If bisherSpielZeit  "" then
'Mach was mit der abgegriffenen Zeit
Else
'Verwende die eigene Methode zum hochsetzen der Zeit
End If

Viele Grüße,
Zwenn
Anzeige
AW: Nachfrage an Zwenn
02.07.2019 00:12:06
stef26
Hallo Zwenn,
danke für deine Unterstützung.
Nun hab ich es so wie ich mir das gedacht habe.
Liebe Grüsse
Stefan
AW: Nachfrage an Zwenn
04.07.2019 22:36:11
stef26
Haken für offen vergessen
AW: Nachfrage an Zwenn
04.07.2019 23:47:55
stef26
ups falsches Thema

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige