7

I'm using Selenium on python and I would like to scroll to an element to click on it. Everywhere I see that the rigth things to do to go directly to the element is to use :

driver = webdriver.Chrome()
driver.get(url)
element = driver.find_elements_by_class_name('dg-button')
driver.execute_script("return arguments[0].scrollIntoView();", element)

But I have this error : "javascript error: arguments[0].scrollIntoView is not a function".

What to I do wrong ? Thanks

Chjul
  • 399
  • 2
  • 3
  • 10

3 Answers3

4

Please use the line of code mentioned below instead of the one you are using:

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

Updated answer:
You can also use location_once_scrolled_into_view it gives the coordinates of the element but it does scrolls the element into view as well. You can use it like:

element = driver.find_elements_by_class_name('dg-button')
element.location_once_scrolled_into_view
Sameer Arora
  • 4,439
  • 3
  • 10
  • 20
3

scrollIntoView() is part of the DOM API and you need to run it on an WebElement but not on a List of WebElement(s).

You need to change find_element(s) to find_element:

element = driver.find_element_by_class_name('dg-button')
driver.execute_script("return arguments[0].scrollIntoView();", element)
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
1

If you need to use it on a List of elements, than you can override it with Python, so you can navigate to the element that you want

e.g. first element of a List

element = driver.find_elements_by_class_name('dg-button')
driver.execute_script("return arguments[0].scrollIntoView();", element[0])

e.g. last element of a List

element = driver.find_elements_by_class_name('dg-button')
driver.execute_script("return arguments[0].scrollIntoView();", element[-1])

Hope that it helps :)