[Edit: rozwiązany, patrz połowie drogi w tekście Pytanie]Youtube + Selenium (Python) - Jak sprawdzić, kiedy wideo się kończy?
szybkie pytanie na zrozumieniu zawartości strony YouTube z odtwarzaniem wideo w nim:
Podsumowując
I używać Selenium do odtwarzania filmów na Youtube, jako część GUI opartego na przeglądarce.
Muszę wiedzieć, kiedy wideo się zakończyło, ponieważ GUI robi coś innego (np. Przesyłaj lokalny kod HTML w przeglądarce).
fragment kodu i pytanie
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)
W tym momencie mogłem time.wait()
do długości filmu.
Zastanawiam się jednak, czy mogę zapytać stronę youtube za pośrednictwem sterownika selenu i ocenić czas pozostały do zakończenia odtwarzania w pętli (nie wiem, jak wyodrębnić te informacje ze strony youtube)
Dzięki!
[Edits roztworem]
Selen Rozwiązanie
Dzięki Stanjer oraz this answer i this other answer, można uzyskać status movie_player
dzięki tej metodzie:
player_status = driver.execute_script("return document.getElementById('movie_player').getPlayerState()")
(nie zapomnij dodać "return" na początku skryptu)
Selen alternatywne rozwiązanie
Mniej eleganckie, ale warto zwrócić uwagę: driver.text
Zwraca ciąg reprezentujący licznik wideo w tym formacie string „1:00/2:00”. Dlatego można sprawdzić, czy film jest odtwarzany przez coś wzdłuż tych linii:
video_is_playing = True
while video_is_playing:
time.sleep(1)
video_is_playing = not(driver.text[:4] == driver.text[-4:])
[edit] Jak na komentarz Jose, ta informacja może być również dostępne przez:
driver.find_element_by_class_name("ytp-time-current").text
komplikacji i następny pytanie
Potrzebuję otworzyć wideo w zmaksymalizowanym formacie iz autoodtwarzaniem.
Oznacza to nazywam następujący adres URL:
youtube.com/v/<video_code>?rel=0&autoplay=1
Jednak ta zwraca bardzo krótki kod HTML, który zawiera tylko kod do umieszczenia na stronie, jak na przykład tutaj:
<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>
Więc nie mam movie_player
element tutaj.
Podejście 1 - czy mogę wyodrębnić czasomierz z application/x-shockwave-flash
?
Podejście 2 - Jeśli uruchomię film z youtube na klasycznej stronie YouTube, jak mogę powiedzieć, że movie_player
, aby zmaksymalizować sam?
(uwaga: this answer i this answer prawdopodobnie zawierać informacje rozwiązać podejście 2, będą pisać jeśli dostanę tę pracę z selen)
Ha, próbując przegłosować, ale nie masz wystarczającej liczby powtórzeń! – Pythonic