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);")