【问题标题】:cannot find element while scraping youtube抓取 youtube 时找不到元素
【发布时间】:2017-11-03 01:47:14
【问题描述】:
我正在尝试从任何视频链接中抓取 youtube 观看次数。我尝试使用 selenium 驱动程序捕获元素,但由于某种原因我无法捕获它。以下是我使用的代码:
driver=webdriver.chrome()
driver.get("https://www.youtube.com/watch?v=F-eMt3SrfFU")
driver.find_element_by_id("count").text
driver.find_element_by_id("watch-view-count").text
我无法捕获此链接上的元素。我在这里做错了吗?
这是一个 youtube 电影链接,我想查看链接上的视图
【问题讨论】:
标签:
python
selenium
web-scraping
【解决方案1】:
可能是 get() 元素无法立即可用之后的情况。您可以像下面的示例一样使用等待。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.chrome()
driver.get("https://www.youtube.com/watch?v=F-eMt3SrfFU")
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "count"))) # 10 seconds implicit wait
print element.text
【解决方案2】:
我不确定为什么 id=count 不起作用。 yt-view-count-renderer 标签可能存在一些奇怪的交互。我测试了 CSS 选择器 span.view-count,它工作得很好。
顺便说一句,您可以使用 $$() 在 Chrome 的 devtools 中测试您的 CSS 选择器,例如$$("span.view-count")。 $$() 相当于driver.find_elements_by_css_selector()。
有关此命令和其他命令的更多详细信息,您可以使用 devtools,请参阅this link。
【解决方案3】:
我建议您稍微细化,而不是使用id("count") 定位节点,我们可以定位innerHTML,即<span> 标记,如下所示:
from selenium import webdriver
driver=webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.youtube.com/watch?v=F-eMt3SrfFU")
my_views = driver.find_element_by_xpath("//span[@class='view-count style-scope yt-view-count-renderer']").text
print(my_views)