Как ждать, пока атрибут sr c не будет определен с помощью Selenium и Python - PullRequest
1 голос
/ 25 марта 2020

Я пишу программу с селеном в python. Моя цель - найти sr c видео на странице. Это мой код

video_element = chrome_driver.find_element_by_tag_name("video")
video_src = video_element.get_attribute("src")

Когда я пытаюсь проверить video_src, я получаю пустую строку, однако, если я поставлю time.sleep(1), прежде чем я попытаюсь получить sr c, я получу реальную ссылку на Видео. Я попытался использовать WebDriverWait вместо time.wait, например,

video_element = WebDriverWait(chrome_driver, 3).until(
            expected_conditions.element_to_be_clickable((By.TAG_NAME, "video"))
        )

Но я не смог найти ни одного условия, которое ожидает, пока тег sr c не заполнится реальной ссылкой. Есть ли способ ждать с селеном вместо времени? (со временем это не гарантирует, что sr c будет заполнен)

Ответы [ 3 ]

2 голосов
/ 25 марта 2020

Пожалуйста, попробуйте приведенное ниже решение, прежде чем вам нужно переключиться на iframe

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.get('https://www.thewatchcartoononline.tv/www-working-episode-1-english-subbed')
driver.switch_to.frame("anime-js-0")
video_element = WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.ID, "video-js_html5_api")))
val = video_element.get_attribute("src")
print val

Выход: enter image description here

2 голосов
/ 25 марта 2020

Вы можете попробовать с ниже.

video_element = WebDriverWait(chrome_driver, 3).until(
            expected_conditions.presence_of_element_located((By.XPATH, "//video[not(@src='')]"))
        )
0 голосов
/ 26 марта 2020

Чтобы извлечь значение атрибута sr c, вам нужно вызвать WebDriverWait для требуемого visibility_of_element_located(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.TAG_NAME, "video"))).get_attribute("innerHTML"))
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//video"))).get_attribute("src"))
    
  • Примечание : необходимо добавить следующий импорт:

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