jack 11 ay önce
ebeveyn
işleme
d2df6c2067
2 değiştirilmiş dosya ile 83 ekleme ve 17 silme
  1. 3 1
      .gitignore
  2. 80 16
      aotu_claim_sepolia/main.py

+ 3 - 1
.gitignore

@@ -60,4 +60,6 @@ docs/_build/
 # PyBuilder
 # PyBuilder
 target/
 target/
 
 
-other/split_clash_config/split_config
+other/split_clash_config/split_config
+
+*/user_data

+ 80 - 16
aotu_claim_sepolia/main.py

@@ -13,7 +13,7 @@ USE_PROXY = True
 # 是否无头模式, 是 True 否 False
 # 是否无头模式, 是 True 否 False
 HEADLESS = False
 HEADLESS = False
 # 是否记录用户数据, 例如cookies, 是 True 否 False
 # 是否记录用户数据, 例如cookies, 是 True 否 False
-NEED_USER_DATA = False
+NEED_USER_DATA = True
 
 
 
 
 class GotifySender:
 class GotifySender:
@@ -38,15 +38,46 @@ class GotifySender:
 
 
 
 
 class ExecuteBrowserActon(object):
 class ExecuteBrowserActon(object):
-    def click_elements(self, page):  # 点击元素
-        pass
+    def click_elements(self, page, selector):  # 点击元素
+        try:
+            # 等待元素可见
+            page.wait_for_selector(selector, state='visible')
+            # 点击元素
+            page.click(selector)
+            print("点击元素成功")
+        except Exception as e:
+            print(f"点击元素时发生异常: {e}")
+            return False
 
 
-    def check_elements(self, page):  # 检查元素
-        pass
+    def check_elements(self, page, selector):  # 检查元素
+        try:
+            # 等待元素可见
+            page.wait_for_selector(selector, state='visible')
+            # 获取元素的文本内容
+            element_text = page.query_selector(selector).inner_text()
+            # 返回元素的文本内容
+            return element_text
+        except Exception as e:
+            print(f"检查元素时发生异常: {e}")
+            return False
 
 
-    def scroll_page(self):  # 滚动页面
+    def scroll_page(self, page):  # 滚动页面
         pass
         pass
 
 
+    def hide_elements(self, page, selector):  # 隐藏元素
+        try:
+            page.evaluate('''() => {{
+            const img = document.querySelector('{}');
+                if (img) {{
+                    img.style.display = 'none';
+                }}
+            }}'''.format(selector))
+            print("隐藏元素成功")
+        except Exception as e:
+            print(f"隐藏元素时发生异常: {e}")
+            return False
+        return True
+
 
 
 class BrowserAutomation:
 class BrowserAutomation:
     def __init__(self):
     def __init__(self):
@@ -61,14 +92,14 @@ class BrowserAutomation:
             self.get_current_file_path(),
             self.get_current_file_path(),
             'user_data')
             'user_data')
 
 
-    def hang_up_browser(self, page):  # 挂起浏览器
+    def check_browser_alive(self, page, browser):  # 挂起浏览器
         try:
         try:
-            while True:
-                page.query_selector("head").inner_html()
-                time.sleep(1)
+            page.query_selector("head").inner_html()
         except Exception as e:
         except Exception as e:
+            browser.close()
             print(f"浏览器被关闭或发生异常: {e}")
             print(f"浏览器被关闭或发生异常: {e}")
-        print('关闭浏览器')
+            exit(0)
+
 
 
     def set_browser(self, playwright):  # 设置浏览器
     def set_browser(self, playwright):  # 设置浏览器
         if self.need_user_data:
         if self.need_user_data:
@@ -115,11 +146,43 @@ class BrowserAutomation:
     def get_current_file_path(self):  # 获取当前文件路径
     def get_current_file_path(self):  # 获取当前文件路径
         return os.path.dirname(os.path.abspath(__file__))
         return os.path.dirname(os.path.abspath(__file__))
 
 
-    def exce_browser_action(self, page):
+    def exce_browser_action(self, page, browser):
         # 实例化执行浏览器动作类
         # 实例化执行浏览器动作类
         Exce = ExecuteBrowserActon()
         Exce = ExecuteBrowserActon()
 
 
-        # 模拟各种动作
+        # 需要用到的所有 选择器
+        hide_img1 = 'body > div.faucet-wrapper > div > div > div > div.faucet-body > div > div.faucet-frontimage > img'
+        hide_img2 = 'body > div.faucet-wrapper > div > div > div > div.faucet-body > div > div.pow-status-container > div > div:nth-child(1) > div > img'
+        status_selector = 'body > div.faucet-wrapper > div > div > div > div.faucet-body > div > div.pow-status-container > div > div.row.pow-status-top > div:nth-child(1) > div.status-value'
+        button_selector1 = 'body > div.faucet-wrapper > div > div > div > div.faucet-body > div > div.faucet-actions.center > button'
+
+        # 隐藏两个图片
+        while True:
+            self.check_browser_alive(page, browser)
+            result = Exce.hide_elements(page, hide_img1)
+            time.sleep(0.5)
+            if result:
+                break
+
+        while True:
+            self.check_browser_alive(page, browser)
+            result = Exce.hide_elements(page, hide_img2)
+            time.sleep(0.5)
+            if result:
+                break
+
+        # 监控领水数值
+        while True:
+            self.check_browser_alive(page, browser)
+            status_value = Exce.check_elements(page, status_selector)
+            if status_value:
+                print(f"当前领取水滴数为: {status_value}")
+                value = float(status_value.split(' ')[0].strip())
+                if value >=2.49:
+                    print('领取水滴数大于2.49, 领取水滴')
+                    Exce.click_elements(page, button_selector1)
+                    break
+                time.sleep(1)
 
 
     def open_browser(self):  # 打开浏览器
     def open_browser(self):  # 打开浏览器
         with sync_playwright() as playwright:
         with sync_playwright() as playwright:
@@ -134,11 +197,12 @@ class BrowserAutomation:
             page.goto(self.target_url)
             page.goto(self.target_url)
 
 
             # TODO 此处开始执行自动化逻辑
             # TODO 此处开始执行自动化逻辑
-            self.exce_browser_action(page)
+            self.exce_browser_action(page, browser)
 
 
             # 自动化执行完成, 挂起浏览器挂机,
             # 自动化执行完成, 挂起浏览器挂机,
-            self.hang_up_browser(page)
-            browser.close()
+            while True:
+                self.check_browser_alive(page, browser)
+                time.sleep(1)
 
 
     def main(self):
     def main(self):
         if self.need_user_data:
         if self.need_user_data: