【问题标题】: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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-16
          • 1970-01-01
          相关资源
          最近更新 更多