Skip to content

Commit 6ddb8bb

Browse files
authored
Merge pull request #63 from hhslepicka/scroll_element
ENH: Add scroll_element method.
2 parents 36985d4 + 556d7bb commit 6ddb8bb

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

botcity/web/bot.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,32 @@ def find_element(self, selector: str, by: str = By.CSS_SELECTOR, waiting_time=10
12121212
except (TimeoutException, NoSuchElementException):
12131213
return None
12141214

1215+
def scroll_element(self, element: WebElement, steps: int = 100, interval: float = 500,
1216+
start: int = 0, end: int = None):
1217+
"""Scrolls down an element by its scroll height or a given amount defined by `start` and `end`.
1218+
1219+
This is useful for scrolling down a page to load more content or
1220+
to scroll down a dynamically loaded element.
1221+
1222+
Args:
1223+
element (WebElement): The element to scroll.
1224+
steps (int, optional): Number of steps in which to conclude the scroll. Defaults to 100.
1225+
interval (float, optional): Time interval between each step. Defaults to 500ms.
1226+
start (int, optional): Start position. Defaults to 0.
1227+
end (int, optional): End position. Defaults to None.
1228+
"""
1229+
ele_height = self.driver.execute_script(
1230+
"return arguments[0].scrollHeight;", element
1231+
)
1232+
1233+
start = max(0, start)
1234+
end = min(ele_height, end) if end is not None else ele_height
1235+
1236+
for i in range(start, end, steps):
1237+
self.driver.execute_script(
1238+
"arguments[0].scrollTo(0, arguments[1])", element, i)
1239+
self.sleep(interval/1000.0)
1240+
12151241
def wait_for_stale_element(self, element: WebElement, timeout: int = 10000):
12161242
"""
12171243
Wait until the WebElement element becomes stale (outdated).

0 commit comments

Comments
 (0)