Как нажать кнопку воспроизведения видео на YouTube, встроенного в smtebook через селен и python

Я хочу нажать на воспроизведение YouTube в https://smtebooks.us/downfile/13192/building-serverless-python-web-services-zappa-pdf.

мой код:

browser.switch_to.frame(0) 
element = browser.find_element_by_xpath("//button[@class='ytp-large-play-button ytp-button']")
element.click()

но не могу найти элемент

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//button[@class='ytp-large-play-button ytp-button']"}
(Session info: chrome=67.0.3396.99)
(Driver info: chromedriver=2.37.543627 (63642262d9fb93fb4ab52398be4286d844092a5e),platform=Windows NT 10.0.17134 x86_64)

Кто-нибудь знает, как с этим бороться?

Спасибо!


person user2106796    schedule 09.08.2018    source источник


Ответы (3)


Чтобы иметь возможность обрабатывать встроенный видеоплеер, вам нужно переключиться на соответствующий iframe и дождаться появления кнопки в DOM:

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

browser.switch_to.frame(browser.find_element_by_xpath('//iframe[starts-with(@src, "https://www.youtube.com/embed")]'))
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="Play"]'))).click()
person Andersson    schedule 09.08.2018

Всегда переключайтесь на фрейм, используя имя или какой-либо локатор:

required_frame = driver.find_element_by_xpath("//iframe[contains(@src,'https://www.youtube.com')]")
driver.switch_to.frame(required_frame) 

И затем, приведенный ниже код работает,

element = driver.find_element_by_xpath("//button[@aria-label='Play']")
element.click()
person Shivam Mishra    schedule 09.08.2018

Если единственная цель - воспроизвести видео, вы можете просто обновить страницу с помощью driver.refresh()

например, ниже работает для меня.

from selenium import webdriver
import time

def watchvideo():
driver = webdriver.Chrome(executable_path="/Users/kamlesh/chromedriver")
driver.get("https://www.youtube.com/watch?v=gXpzn8PAScw")
driver.refresh()
time.sleep(170)
driver.close()
person Kamlesh Bhatt    schedule 30.11.2019
comment
Если в настройках Chrome указано, что видео не воспроизводится автоматически, этот обходной путь явно не сработает. - person Zain Ul Abidin; 18.05.2021