Получение ошибки: «javascript error: Cannot read property» при отслеживании HTML текущего видео времени с использованием комбинации JavaScript и Selenium - PullRequest
0 голосов
/ 30 апреля 2020

Я хотел бы в интервале отслеживать ход воспроизведения видео в видео HTML.

Исходя из учебника , событие HTML video DOM timeupdate может быть достигнуто с помощью чего-то вроде следующего:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path=r"\Browsers\chromedriver.exe",
                           options=chrome_options)


browser.get("https://www.youtube.com/watch?v=nXbfZL5kttM")

WebDriverWait(browser, 70).until(EC.element_to_be_clickable(
(By.XPATH, "//button[@aria-label='Play']"))).click()

javascript_to_execute = ' return document.getElementById("ytplayer").currentTime();'
for x in range(0, 2):
    time_current = browser.execute_script(javascript_to_execute)
    print(time_current)
    time.sleep(1)

Однако я получил следующее ошибка

Сообщение: javascript ошибка: невозможно прочитать свойство 'currentTime' со значением NULL

Могу ли я узнать, где я поступил неправильно. Ценю любую подсказку или помощь. Заранее спасибо

1 Ответ

0 голосов
/ 30 апреля 2020

Следующий код должен работать благодаря предложению, сделанному из OP1 . Чтобы получить currentTime видео HTML с использованием JS, можно рассмотреть следующее:

Код JS для извлечения текущего видео:

"return document.getElementsByTagName('video')[0].currentTime;"

. выше JS может быть выполнено с использованием метода execute_script

   time_video = browser.execute_script("return document.getElementsByTagName('video')[0].currentTime;")

Чтобы исследовать, способна ли вышеуказанная реализация получить синхронизацию видео, скажем, в середине видео. Сначала мы переходим к позиции , скажем, 180 se c из начальной точки, используя код ниже.

player_status = browser.execute_script("document.getElementsByTagName('video')[0].currentTime += 180;")

Полный код приведен ниже;

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

chrome_options = webdriver.ChromeOptions()
browser = webdriver.Chrome(executable_path = r"some_path\Browsers\chromedriver.exe",
                           options = chrome_options)


browser.get("https://www.youtube.com/watch?v=nXbfZL5kttM")

WebDriverWait(browser, 70).until(EC.element_to_be_clickable(
    (By.XPATH, "//button[@aria-label='Play']"))).click()
print('Fast forward')
player_status = browser.execute_script("document.getElementsByTagName('video')[0].currentTime += 80;")
print('Get Current time')
time_video = browser.execute_script("return document.getElementsByTagName('video')[0].currentTime;")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...