How can I scroll a web page using selenium webdriver in python?

前端 未结 18 1650
孤街浪徒
孤街浪徒 2020-11-22 07:04

I am currently using selenium webdriver to parse through facebook user friends page and extract all ids from the AJAX script. But I need to scroll down to get all the friend

相关标签:
18条回答
  • 2020-11-22 07:24
    element=find_element_by_xpath("xpath of the li you are trying to access")
    
    element.location_once_scrolled_into_view
    

    this helped when I was trying to access a 'li' that was not visible.

    0 讨论(0)
  • 2020-11-22 07:27

    same method as shown here:

    in python you can just use

    driver.execute_script("window.scrollTo(0, Y)")
    

    (Y is the vertical position you want to scroll to)

    0 讨论(0)
  • 2020-11-22 07:31

    When working with youtube the floating elements give the value "0" as the scroll height so rather than using "return document.body.scrollHeight" try using this one "return document.documentElement.scrollHeight" adjust the scroll pause time as per your internet speed else it will run for only one time and then breaks after that.

    SCROLL_PAUSE_TIME = 1
    
    # Get scroll height
    """last_height = driver.execute_script("return document.body.scrollHeight")
    
    this dowsnt work due to floating web elements on youtube
    """
    
    last_height = driver.execute_script("return document.documentElement.scrollHeight")
    while True:
        # Scroll down to bottom
        driver.execute_script("window.scrollTo(0,document.documentElement.scrollHeight);")
    
        # Wait to load page
        time.sleep(SCROLL_PAUSE_TIME)
    
        # Calculate new scroll height and compare with last scroll height
        new_height = driver.execute_script("return document.documentElement.scrollHeight")
        if new_height == last_height:
           print("break")
           break
        last_height = new_height
    
    0 讨论(0)
  • 2020-11-22 07:32

    scroll loading pages. Example: medium, quora,etc

    last_height = driver.execute_script("return document.body.scrollHeight")
        while True:
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight-1000);")
            # Wait to load the page.
            driver.implicitly_wait(30) # seconds
            new_height = driver.execute_script("return document.body.scrollHeight")
        
            if new_height == last_height:
                break
            last_height = new_height
            # sleep for 30s
            driver.implicitly_wait(30) # seconds
        driver.quit()
    
    0 讨论(0)
  • 2020-11-22 07:32

    You can use send_keys to simulate a PAGE_DOWN key press (which normally scroll the page):

    from selenium.webdriver.common.keys import Keys
    html = driver.find_element_by_tag_name('html')
    html.send_keys(Keys.PAGE_DOWN)
    
    0 讨论(0)
  • 2020-11-22 07:34

    if you want to scroll within a particular view/frame (WebElement), what you only need to do is to replace "body" with a particular element that you intend to scroll within. i get that element via "getElementById" in the example below:

    self.driver.execute_script('window.scrollTo(0, document.getElementById("page-manager").scrollHeight);')
    

    this is the case on YouTube, for example...

    0 讨论(0)
提交回复
热议问题