如何使用python中的selenium滚动到页面的末尾

时间:2015-09-04 06:18:36

标签: python selenium

我正在尝试滚动到页面的末尾,以便我可以显示所有数据并将其提取出来。我试图找到它的命令,但它在java(driver.executeScript)中可用,但无法找到python。现在我正在让计算机按下结束键一千次:

while i<1000:
        scroll = driver.find_element_by_tag_name('body').send_keys(Keys.END)
        i+=1

我还尝试了driver.execute_script(&#34; window.scrollTo(0,document.body.scrollHeight);&#34;)但它滚动到加载页面的末尾,同样的东西END键做了。一旦到达页面底部,下一个内容就会加载。但现在它不会再滚动。

我知道会有一个非常好的选择。请帮助。

5 个答案:

答案 0 :(得分:15)

好吧,我终于想出了一个解决方案:

lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
    match=False
        while(match==False):
                lastCount = lenOfPage
                time.sleep(3)
                lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
                if lastCount==lenOfPage:
                    match=True

答案 1 :(得分:4)

这可以通过滚动到document.body.scrollHeight

在一行中完成
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

答案 2 :(得分:0)

您可以将scrollingElementscrollTopscrollHeight结合使用来滚动到页面末尾。

driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")

参考文献:

  1. Scroll Automatically to the Bottom of the Page
  2. Document.scrollingElement - Web APIs | MDN
  3. Element.scrollHeight - Web APIs | MDN
  4. Element.scrollTop - Web APIs | MDN

答案 3 :(得分:0)

这些都不对我有用,但是下面的解决方案可以做到:

driver.get("https://www.youtube.com/user/teachingmensfashion/videos")


def scroll_to_bottom(driver):

    old_position = 0
    new_position = None

    while new_position != old_position:
        # Get old scroll position
        old_position = driver.execute_script(
                ("return (window.pageYOffset !== undefined) ?"
                 " window.pageYOffset : (document.documentElement ||"
                 " document.body.parentNode || document.body);"))
        # Sleep and Scroll
        time.sleep(1)
        driver.execute_script((
                "var scrollingElement = (document.scrollingElement ||"
                " document.body);scrollingElement.scrollTop ="
                " scrollingElement.scrollHeight;"))
        # Get new position
        new_position = driver.execute_script(
                ("return (window.pageYOffset !== undefined) ?"
                 " window.pageYOffset : (document.documentElement ||"
                 " document.body.parentNode || document.body);"))

scroll_to_bottom(driver)

答案 4 :(得分:0)

由于没有为网站提供链接,因此我将假定页面上存在某种 See More / Load More 可点击元素。这就是我想要的,它非常简单。

count=10000
while count>1:
   try:
       button=driver.find_element_by_xpath('//*[@id="load_more"]')
       button.click()
       count-=1
       time.sleep(2)
   except StaleElementReferenceException:
       button=driver.find_element_by_xpath('//*[@id="load_more"]')
       button.click()
       time.sleep(2)