23

I'm having issues with scrolling to the top of the web page when using Python and Selenium.

When the page loads for some reason you are taken to the bottom of the page (this is due to be fixed). However, when I'm trying to scroll to the top it does not work.

I tried the following:

self.driver.execute_script("scroll(0, -250);")

And

self.driver.execute_script("scroll(0, 0);")

I have also tried locating the element then scrolling to it:

self.driver.execute_script("arguments[0].scrollIntoView()", element)

The above scrollIntoView() code works when scrolling down to the element. However, it does not work scrolling up.

I have tried this running Chrome Driver and PhantomJs.

Any suggestions?

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
cmplfore
  • 425
  • 2
  • 4
  • 9
  • 1
    have you tried putting `window.scrollTo(0, 0);` inside of your `execute_script`? – Mangohero1 Aug 08 '17 at 19:54
  • 1
    @mangoHero1 I've tried `self.driver.window.scroll("window.scroll(0, 0);")` and the script displayed the following error: _self.driver.window.scroll("window.scroll(0, 0);") AttributeError: 'WebDriver' object has no attribute 'window'_ – cmplfore Aug 08 '17 at 19:59
  • 1
    @mangoHero1 sorry I saw the typo corrected it and did the following: `self.driver.execute_script("window.scroll(0, 0);")` still didnt scroll up. – cmplfore Aug 08 '17 at 20:01
  • @jlaur yeah sorry this was done late at night and I typed the code above. What i actually tried, which didnt work, was the following: `self.driver.execute_script("window.scrollTo(0, 0);")` – cmplfore Aug 09 '17 at 07:19

8 Answers8

32

You can simply use CTRL + HOME keys. It will scroll to the top of the page.

from selenium.webdriver.common.keys import Keys
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + Keys.HOME)
cottontail
  • 10,268
  • 18
  • 50
  • 51
SunilThorat
  • 1,672
  • 2
  • 13
  • 15
  • 2
    probably need to `from selenium.webdriver.common.keys import Keys` first? – ErichBSchulz Aug 18 '18 at 05:13
  • @ErichBSchulz, yes, that's correct. `Keys` needs to be imported. – SunilThorat Aug 20 '18 at 08:11
  • This doesn't seem to work if the browser is minimized – NotAPro Aug 06 '22 at 18:57
  • If you get the following warning: `DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead` change the code to: `from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By driver.find_element(By.XPATH, '//body').send_keys(Keys.CONTROL + Keys.HOME)` – Haddock-san Nov 04 '22 at 17:02
11

You can consider to locate the element in the HTML DOM first, then we can scroll the element into the Viewport as follows:

element = driver.find_element_by_xpath("element_xpath")
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
2

There are 4 ways to scroll up or down

1)scroll by pixel

driver.execute_script("window.scrollBy(0,0)","")

2)scroll down until the element is not found

element=driver.find_element(By.XPATH,"xpath of element")
driver.execute_script("arguments[0].scrollIntoView();",element)

3)scroll till the end of the page

driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
  1. using Action Chains

    elementpos=driver.find_element(By.XPATH,"xpath of element")
    actions=ActionChains(driver) actions.move_to_element(elementpos).perform()

surender pal
  • 447
  • 6
  • 15
1
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("__")

#to scroll try use the following command
driver.execute_script("scrollBy(0,250);")

It will work !!

Hamza Anis
  • 2,475
  • 1
  • 26
  • 36
Vyr
  • 175
  • 1
  • 3
1

Please try this:

driver.execute_script("document.querySelector('div[role=dialog] ul').parentNode.scrollTop=1e100")
Hamed Baziyad
  • 1,954
  • 5
  • 27
  • 40
1

from selenium import webdriver

t=10
while t:

#if you want to scroll to the end of the page,use this

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


#if you want to scroll down upto some level use this, here i used "1000" you may vary 
#it according to your use

driver.execute_script("scrollBy(0,+1000);")
    sleep(3)


#if you want to scroll some level up, use this,again i used here "-500" you may vary 
#according to your use 

driver.execute_script("scrollBy(0,-500);")
sleep(3)
t=t-1       # it`s a part of the loop

This will surely help you :)

Sanyam Gupta
  • 258
  • 3
  • 8
1

You can use document.body.scrollTop: a javascript variable which contains the value by what the page had been scrolled down before that. like this : driver.execute_script("scrollBy(0,-document.body.scrollTop)")

1

You can use document.body.scrollTop: it will scroll to the top of the page no matter the height of it. Like this:

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