from math import log import random from re import S import time from tkinter import N from DrissionPage import Chromium from loguru import logger from work import get_random_canada_info from mail_ import mail_ from bit_browser import bit_browser from api import api class Auto: def __init__(self, http: str = None): self.browser = Chromium(http) self.tab = self.browser.latest_tab pass # cf打码 def solve_cloudflare(self, is_ok: bool = False): tab = self.browser.latest_tab for _ in range(5): tab.wait(1) res = tab.ele( 't:h1@text()=Sorry, you have been blocked', timeout=1) if res: logger.error("Cloudflare验证失败") return False try: shadow1 = tab.ele( 'x://*[@name="cf-turnstile-response"]').parent().shadow_root iframe = shadow1.get_frame(1) if iframe: logger.debug("找到Cloudflare iframe") shadow2 = iframe.ele('x:/html/body').shadow_root if shadow2: logger.debug("找到Cloudflare iframe body shadow root") status = shadow2.ele( 'x://span[text()="Verifying..."]', timeout=1.5) if status: logger.debug("Cloudflare验证中,等待3秒") tab.wait(3) status = shadow2.ele( 'x://span[text()="Success!"]', timeout=1.5) if status: logger.debug("Cloudflare验证成功") return True checkbox = shadow2.ele( 'x://input[@type="checkbox"]', timeout=1.5) if checkbox: logger.debug("点击Cloudflare复选框") checkbox.click() tab.wait(3) logger.debug("重新获取状态") # return False except Exception as e: # logger.error(f"处理Cloudflare异常: {e}") if is_ok: logger.debug(f"cloudflare处理通过: {e}") return True return self.solve_cloudflare(is_ok=True) tab.wait(1) return False def wait_home(self): logger.debug("等待进入首页") jc = 0 while True: if jc > 3: logger.error("等待进入首页超过5次,未成功") return False self.tab.wait(1) # 判断cf是否通过 bol = self.solve_cloudflare() if not bol: logger.debug("Cloudflare验证失败.") # 刷新网页 self.tab.refresh() self.tab.wait(1.5) jc += 1 continue else: logger.debug("Cloudflare验证成功.") self.tab.wait(1.5) bol = self.tab.ele( 't:h1@text()=Sorry, you have been blocked', timeout=1) if bol: logger.debug("ip被ban秒") return False bol = self.tab.ele( 't:div@text():ERR_TIMED_OUT', timeout=1) if bol: logger.debug("刷新网页") self.tab.refresh() self.tab.wait(1.5) bol = self.tab.ele( 't:div@text():ERR_SSL_PROTOCOL_ERROR', timeout=1) if bol: logger.debug("刷新网页") self.tab.refresh() self.tab.wait(1.5) bol = self.tab.ele( 't:div@text():ERR_SOCKS_CONNECTION_FAILED', timeout=1) if bol: logger.debug("刷新网页") self.tab.refresh() self.tab.wait(1.5) html = self.tab.url logger.debug(f"当前URL: {html}") if 'https://veritaconnect.ca/canadianbreadsettlement/en-us' == html: logger.debug("成功进入首页") return True jc += 1 def open_url(self, url: str): self.tab.get(url) def main(): browser_id = bit_browser.bit_browser_create( remark=f"us.novproxy.io:1000:ozua8623-region-CA-st-Ontario-city-Toronto:6wdcv4gq", host="us.novproxy.io", port=1000, proxy_user="ozua8623-region-CA-st-Alberta-city-Calgary", proxy_pwd="6wdcv4gq", proxy_type='socks5' ) http = bit_browser.bit_browser_open(browser_id) logger.debug(f"打开浏览器 {browser_id}, http: {http}") auto = Auto(http) auto.open_url( "https://veritaconnect.ca/canadianbreadsettlement/en-us/Claimant/UnknownClaimForm") auto.wait_home() if __name__ == '__main__': main()