Не удается получить динамический элемент с селеном Python - PullRequest
0 голосов
/ 05 октября 2018

Существует сайт , который транслирует видео с YouTube.Я хочу получить плейлист с ними.Поэтому я использую селеновый веб-драйвер для получения необходимого элемента div с именем класса ytp-title-text, где расположена ссылка на YouTube.

Он расположен здесь, например, когда я использую консоль браузера для поиска элемента:

<div class="ytp-title-text"><a class="ytp-title-link yt-uix-sessionlink" target="_blank" data-sessionlink="feature=player-title" href="https://www.youtube.com/watch?v=VyCY62ElJ3g">Fears - Jono McCleery</a><div class="ytp-title-subtext"><a class="ytp-title-channel-name" target="_blank" href=""></a></div></div>

Я написал простой скрипт для тестирования:

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

driver = webdriver.Firefox()
driver.get('http://awsmtv.com')

try:
    element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.CLASS_NAME, "ytp-title-text"))
    )
finally:
    driver.quit()

Но элемент не найден, и возникло исключение тайм-аута.Я не могу понять, какие действия нужно выполнить селену, чтобы получить полный исходный код страницы.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Обязательная ссылка скрыта и также находится внутри фрейма.Попробуйте ниже, чтобы найти его:

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("tvPlayer_1"))
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "ytp-title-link")))
    print(element.get_attribute('href'))
finally:
    driver.quit()
0 голосов
/ 05 октября 2018

Только что увидел, что этот элемент находится внутри iframe ... Сначала нужно переключиться на iframe -> найти его по ClassName -> ifame = ...(By.CLASS_NAME, "player"), затем переключиться на него driver.switch_to_frame(iframe), и теперь вы сможете получить нужный элемент:)

Локатор XPath, подобный этому, будет работать (или ваш локатор) -> "//a[@class='ytp-title-link yt-uix-sessionlink']".

Затем вам нужно через элемент получить свойство href для видео на YouTube.url или text элемента для названия песни.

Если все еще не работает, я могу предложить получить источник страницы - html = driver.page_source, который даст вам источник страницы и через некоторое регулярное выражение дляв конце концов получите необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...