From 1a98dca06689dbf9f19fc383275b9a835c813086 Mon Sep 17 00:00:00 2001 From: g1879 Date: Mon, 10 Jan 2022 15:30:18 +0800 Subject: [PATCH] =?UTF-8?q?DriverElement=E6=B7=BB=E5=8A=A0scroll=5Fto()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrissionPage/driver_element.py | 39 ++++++++++++++++++++++++++++++++++ DrissionPage/driver_page.py | 6 ++++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/DrissionPage/driver_element.py b/DrissionPage/driver_element.py index 20e21e0..b082a31 100644 --- a/DrissionPage/driver_element.py +++ b/DrissionPage/driver_element.py @@ -477,6 +477,45 @@ class DriverElement(DrissionElement): """ return self.inner_ele.parent.execute_script(script, self.inner_ele, *args) + def scroll_to(self, mode: str = 'bottom', pixel: int = 300) -> None: + """按参数指示方式滚动元素 \n + :param mode: 可选滚动方向:'top', 'bottom', 'half', 'rightmost', 'leftmost', 'up', 'down', 'left', 'right' + :param pixel: 滚动的像素 + :return: None + """ + if mode == 'top': + self.run_script("arguments[0].scrollTo(arguments[0].scrollLeft,0);") + + elif mode == 'bottom': + self.run_script("arguments[0].scrollTo(arguments[0].scrollLeft,arguments[0].scrollHeight);") + + elif mode == 'half': + self.run_script("arguments[0].scrollTo(arguments[0].scrollLeft,arguments[0].scrollHeight/2);") + + elif mode == 'rightmost': + self.run_script("arguments[0].scrollTo(arguments[0].scrollWidth,arguments[0].scrollTop);") + + elif mode == 'leftmost': + self.run_script("arguments[0].scrollTo(0,arguments[0].scrollTop);") + + elif mode == 'up': + pixel = pixel if pixel >= 0 else -pixel + self.run_script(f"arguments[0].scrollBy(0,{pixel});") + + elif mode == 'down': + self.run_script(f"arguments[0].scrollBy(0,{pixel});") + + elif mode == 'left': + pixel = pixel if pixel >= 0 else -pixel + self.run_script(f"arguments[0].scrollBy({pixel},0);") + + elif mode == 'right': + self.run_script(f"arguments[0].scrollBy({pixel},0);") + + else: + raise ValueError("mode参数只能是'top', 'bottom', 'half', 'rightmost', " + "'leftmost', 'up', 'down', 'left', 'right'。") + def submit(self) -> Union[bool, None]: """提交表单""" try: diff --git a/DrissionPage/driver_page.py b/DrissionPage/driver_page.py index f419a22..f0a63f8 100644 --- a/DrissionPage/driver_page.py +++ b/DrissionPage/driver_page.py @@ -429,13 +429,15 @@ class DriverPage(BasePage): self.driver.execute_script("window.scrollTo(0,document.documentElement.scrollTop);") elif mode == 'up': - self.driver.execute_script(f"window.scrollBy(0,-{pixel});") + pixel = pixel if pixel >= 0 else -pixel + self.driver.execute_script(f"window.scrollBy(0,{pixel});") elif mode == 'down': self.driver.execute_script(f"window.scrollBy(0,{pixel});") elif mode == 'left': - self.driver.execute_script(f"window.scrollBy(-{pixel},0);") + pixel = pixel if pixel >= 0 else -pixel + self.driver.execute_script(f"window.scrollBy({pixel},0);") elif mode == 'right': self.driver.execute_script(f"window.scrollBy({pixel},0);")