【问题标题】:How to scroll down in Youtube using selenium?如何使用硒在 Youtube 中向下滚动?
【发布时间】:2019-03-28 14:55:45
【问题描述】:

我想在 Youtube 中启用我需要向下滚动的评论框。
这是我现在正在做的事情:-

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=l5LfjYmNEJs&t=160s")

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

但它只会向下滚动一点点,但不足以启用评论框。
我该怎么办?

【问题讨论】:

  • @KajalKundu 我在这个问题之前已经看到了这个答案。我的问题是上面的代码几乎适用于除 youtube 之外的所有网站。
  • 这更像是一个 Javascript 问题。或许你可以试试:driver.execute_script("document.getElementById("footer-links-secondary").scrollIntoView();")
  • @Ardweaden 我运行了它给出以下错误的代码 - selenium.common.exceptions.WebDriverException: Message: unknown error: Cannot read property 'scrollIntoView' of null
  • 啊,对不起,我在主页而不是视频页面上尝试过。后一个上可能没有具有该 id 的元素。 driver.execute_script("document.getElementById("footer-links").scrollIntoView();") 怎么样?

标签: javascript python selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

我找到了一个解决方案。看看这是否有帮助。time.sleep 需要在 while 循环中减慢速度。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/watch?v=l5LfjYmNEJs&t=160s")

while(True):
    height = driver.execute_script("return document.body.scrollHeight")
    time.sleep(1)
    driver.find_element_by_tag_name('body').send_keys(Keys.END)
    if int(height)==0:
        break

【讨论】:

    【解决方案2】:

    不幸的是,答案对我不起作用。但这行得通。

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get("https://www.youtube.com/c/klikklak/videos")
    
    while True:
        scroll_height = 2000
        document_height_before = driver.execute_script("return 
        document.documentElement.scrollHeight")
        driver.execute_script(f"window.scrollTo(0, {document_height_before 
        + scroll_height});")
        time.sleep(1.5)
        document_height_after = driver.execute_script("return 
        document.documentElement.scrollHeight")
        if document_height_after == document_height_before:
            break
    

    【讨论】:

      【解决方案3】:

      KunduK 的回答太棒了!但在 Firefox 中获取频道的所有视频对我来说并不好。所以我修改了 JavaScript 部分

       height = driver.execute_script("return document.documentElement.scrollHeight(window.innerHeight + window.scrollY);")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 2019-09-26
        • 2020-12-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        相关资源
        最近更新 更多