From 1bb32ba6179fd6d1b508db51e93fbcf161ca8448 Mon Sep 17 00:00:00 2001 From: Wen-Ming21 <3348431908@qq.com> Date: Wed, 2 Oct 2024 06:54:45 +0000 Subject: [PATCH] =?UTF-8?q?update=20DrissionPage/=5Felements/chromium=5Fel?= =?UTF-8?q?ement.py.=20=E6=96=B0=E5=A2=9E=E5=BC=BA=E5=88=B6=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=85=83=E7=B4=A0=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Wen-Ming21 <3348431908@qq.com> --- DrissionPage/_elements/chromium_element.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/DrissionPage/_elements/chromium_element.py b/DrissionPage/_elements/chromium_element.py index f10d0bb..90bc03f 100644 --- a/DrissionPage/_elements/chromium_element.py +++ b/DrissionPage/_elements/chromium_element.py @@ -593,7 +593,27 @@ class ChromiumElement(DrissionElement): self._run_js('this.focus();') return self - def hover(self, offset_x=None, offset_y=None): + def keep_pseudo_state(self, forcedPseudoClasses): + while self.__dict__.get('keep_count', 0): + self.owner.run_cdp('CSS.enable') + self.owner.run_cdp('CSS.forcePseudoState', nodeId=self._node_id, forcedPseudoClasses=forcedPseudoClasses) + + def force_pseudo_state(self, keep_state=True, forcedPseudoClasses=None): + if not forcedPseudoClasses: + forcedPseudoClasses = ['hover'] + if keep_state and self.__dict__.get('keep_count', 0) == 0: + from random import randint + x, y = self.owner.rect.size + x, y = (x, y) if x <= y else (y, x) + self.owner.actions.move_to(self, offset_x=randint(x, y), offset_y=randint(x, y), duration=.1) + self.__dict__['keep_count'] = 1 + Thread(target=self.keep_pseudo_state, args=(forcedPseudoClasses,)).start() + if self.__dict__.get('keep_count', 0) > 0 and not keep_state: + del self.__dict__['keep_count'] + return self + + def hover(self, offset_x=None, offset_y=None, keep_hover=False): + self.force_pseudo_state(keep_hover, forcedPseudoClasses=['hover']) self.owner.actions.move_to(self, offset_x=offset_x, offset_y=offset_y, duration=.1) return self