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