[Edit: risolto, vedi a metà strada nel testo della domanda]Youtube + Selenium (Python) - Come sapere quando termina il video?
Domanda veloce sulla comprensione dei contenuti di una pagina di YouTube con un video che gioca in esso:
In sintesi
I utilizzare Selenium per riprodurre video su Youtube, come parte di una GUI basata su browser.
Ho bisogno di sapere quando il video ha finito di suonare, perché la GUI fa qualcos'altro (ad esempio, carica l'HTML locale nel browser).
snippet di codice in discussione
import os, time
from selenium import webdriver
# [...]
chromedriver = 'path_to_chromedriver_binary' # substitute as appropriate
driver = webdriver.Chrome(chromedriver)
youtube_link = 'https://www.youtube.com/watch?v=BHjg6cTxmrQ'
driver.get(youtube_link)
A questo punto ho potuto time.wait()
per la lunghezza del video.
Tuttavia, mi chiedo se ho potuto interrogare la pagina di YouTube tramite il driver selenio e misurare il tempo rimanente per il play-through in un ciclo while (io non sono a conoscenza di come estrarre queste informazioni da una pagina youtube)
Grazie!
[modifiche con la soluzione]
Selenio soluzione
Grazie a Stanjer, ea this answer e this other answer, è possibile ottenere lo stato movie_player
attraverso questo metodo:
player_status = driver.execute_script("return document.getElementById('movie_player').getPlayerState()")
(non dimenticare di aggiungere "return" all'inizio della sceneggiatura)
Soluzione alternativa Selenio
meno elegante ma vale la pena sottolineare: driver.text
restituisce una stringa che rappresenta il timer di video in questo formato stringa '01:00/02:00'. Pertanto si può verificare se il video viene riprodotto fino da qualcosa in queste righe:
video_is_playing = True
while video_is_playing:
time.sleep(1)
video_is_playing = not(driver.text[:4] == driver.text[-4:])
[modifica] Come da commento di Jose, queste informazioni si può accedere anche da:
driver.find_element_by_class_name("ytp-time-current").text
Complication e il prossimo domanda
Ho bisogno di aprire il video in formato ingrandito e con autoplay.
Ciò significa che io chiamo il seguente url:
youtube.com/v/<video_code>?rel=0&autoplay=1
Tuttavia questo restituisce un brevissimo html che contiene solo un codice embed, come da esempio qui:
<HTML><HEAD></HEAD>
<BODY leftMargin=0 scroll=no topMargin=0>
<EMBED height="100%"
type=application/x-shockwave-flash
width="100%"
src=https://www.youtube.com/v/Fsc-oT9PsSQ?rel=0&autoplay=1
fullscreen="yes">
</BODY>
</HTML>
quindi non ho movie_player
elemento qui.
Metodo 1: è possibile estrarre il timer dallo application/x-shockwave-flash
?
Approccio 2 - Se lancio il video di youtube in una classica pagina Youtube, come posso dire allo movie_player
di ingrandirsi?
(nota: this answer e this answer probabilmente contengono informazioni per risolvere approccio 2, posterò se ottengo questo lavoro con selenio)
Ha, cercando di upvotare ma non ha abbastanza rep! – Pythonic