有site,可以流式传输YouTube视频。我想和他们一起获得播放列表。因此,我使用Selenium WebDriver获取了YouTube链接所在的类名称为div
的所需元素ytp-title-text
。
例如,当我使用浏览器控制台查找元素时,它位于此处:
<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()
但是未找到任何元素,并且引发了超时异常。我不明白,硒需要执行哪些操作才能获得整个页面的源代码。
答案 0 :(得分:2)
所需的链接被隐藏,并且也位于iframe中。尝试在下面找到它:
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()
答案 1 :(得分:1)
仅看到此元素位于iframe中...您需要先切换到iframe->通过ClassName找到它-> ifame = ...(By.CLASS_NAME, "player")
然后再切换到driver.switch_to_frame(iframe)
,现在应该可以得到想要的元素:)
像这样的XPath定位器(或您的定位器)将起作用-> "//a[@class='ytp-title-link yt-uix-sessionlink']"
。
然后,您需要通过元素获取youtube视频网址的属性href
或歌曲标题的元素text
。
如果仍然无法正常工作,我建议您获取页面源-html = driver.page_source
,它将为您提供页面源并通过一些正则表达式最终获得您想要的信息。