[Edit: решена, см середине пути в тексте вопроса]Youtube + Selenium (Python) - Как узнать, когда заканчивается видео?
Быстрый вопрос о понимании содержания страницы Youtube с видео играет в нем:
Резюмируя
I используйте Selenium для воспроизведения видео на Youtube, как часть графического интерфейса на основе браузера.
Мне нужно знать, когда видео закончило играть, поскольку графический интерфейс делает что-то еще (например, подавать локальный HTML в браузере).
Фрагмент кода и вопрос
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)
На данный момент я мог time.wait()
для длины видео.
Тем не менее, я задал вопрос, могу ли я запросить страницу youtube через драйвер selenium и измерить оставшееся время для воспроизведения в цикле while (я не знаю, как извлечь эту информацию с страницы YouTube)
Спасибо!
[редактирует с решением]
Селен Решение
Благодаря Stanjer и this answer и this other answer, вы можете получить movie_player
статус с помощью этого метода:
player_status = driver.execute_script("return document.getElementById('movie_player').getPlayerState()")
(не забудьте добавить «return» в начале скрипта)
Селен Альтернативное решение
менее элегантный, но стоит отметить: driver.text
возвращает строку, представляющую видео таймер в этой строке в формате «1:00/2:00». Таким образом, вы можете проверить, если видео воспроизводится через что-то вдоль этих линий:
video_is_playing = True
while video_is_playing:
time.sleep(1)
video_is_playing = not(driver.text[:4] == driver.text[-4:])
[править] В соответствии с комментарием Хосе, эта информация может также быть доступны:
driver.find_element_by_class_name("ytp-time-current").text
Complication и рядом вопрос
Мне нужно открыть видео в максимальном формате и с автовоспроизведением.
Это означает, что я называю по следующему адресу:
youtube.com/v/<video_code>?rel=0&autoplay=1
Однако это возвращает очень короткий HTML, который содержит только код для вставки, как в примере здесь:
<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>
Так у меня нет movie_player
элемент здесь.
Подход 1 - могу ли я извлечь таймер из application/x-shockwave-flash
?
Подход 2 - Если я запускаю видео с YouTube на классической странице Youtube, как я могу сообщить movie_player
, чтобы максимизировать себя?
(примечание: this answer и this answer вероятно, содержат информацию, чтобы решить подход 2, разместит, если я получаю эту работу с селеном)
Ха, пытаясь подняться, но не хватает репутации! – Pythonic