import concurrent import threading import time from concurrent.futures import ThreadPoolExecutor from models.hub_web import HubWeb from DrissionPage import ChromiumPage, ChromiumOptions class WebProcess: def __init__(self, hub_web_info): self.page_port = 3021 + int(hub_web_info.id) # 文件设置 path = "C:\\haha" self.tmp_path = path + f"\\tmp_{self.page_port}" self.user_path = path + f"\\user_{self.page_port}" self.cache_path = path + f"\\cache_{self.page_port}" self.hub_web_info = hub_web_info def get_page_tab(self, url): while True: try: tab = self.page.get_tab(url=url) return tab except: time.sleep(1) def join_metamask(self, ): metamask_tab = self.page.new_tab( 'chrome-extension://hlmhmplfebaofhhdjcmmjodfngpjlnfd/home.html#onboarding/welcome') ele = metamask_tab.ele('x://input[@data-testid="unlock-password"]', timeout=5) if ele: ele.input("12345678") time.sleep(3) metamask_tab.ele('x://button[@data-testid="unlock-submit"]').click() return metamask_tab.ele('x://input[@type="checkbox"]').click(by_js=True) metamask_tab.ele('x://button[@data-testid="onboarding-import-wallet"]').click() metamask_tab.ele('x://input[@type="checkbox"]').click() metamask_tab.ele('x://button[@data-testid="metametrics-no-thanks"]').click() for i, text in zip(range(12), self.hub_web_info.words.split(" ")): metamask_tab.ele(f'x://input[@id="import-srp__srp-word-{i}"]').input(text) metamask_tab.ele('x://button[@data-testid="import-srp-confirm"]').click() metamask_tab.ele('x://input[@data-testid="create-password-new"]').input("12345678") metamask_tab.ele('x://input[@data-testid="create-password-confirm"]').input("12345678") metamask_tab.ele('x://input[@data-testid="create-password-terms"]').click() metamask_tab.ele('x://button[@data-testid="create-password-import"]').click() metamask_tab.ele('x://button[@data-testid="onboarding-complete-done"]').click() metamask_tab.ele('x://button[@data-testid="pin-extension-next"]').click(by_js=True) metamask_tab.ele('x://button[@data-testid="pin-extension-done"]').click(by_js=True) time.sleep(3) metamask_tab.close() def action(self): co = ChromiumOptions() co.set_local_port(self.page_port) co.add_extension(r'MetaMask 12.16.1') co.set_tmp_path(self.tmp_path) co.set_user_data_path(self.user_path) co.set_cache_path(self.cache_path) co.set_proxy("http://192.168.50.220:10809") self.page = ChromiumPage(co) try: self.join_metamask() metamask_tab = self.get_page_tab(url='hlmhmplfebaofhhdjcmmjodfngpjlnfd') if metamask_tab: metamask_tab.close() # ===================================================================================================== tab = self.page.new_tab("https://app.sign.global/create-schema") tab.ele('x://button[text()="Connect Wallet"]').click() ele = tab.ele('x://div[text()="MetaMask"]', timeout=5) if ele: ele.click() time.sleep(3) metamask_tab1 = self.get_page_tab(url='hlmhmplfebaofhhdjcmmjodfngpjlnfd') time.sleep(3) metamask_tab1.ele('x://button[@data-testid="confirm-btn"]').click() time.sleep(3) tab.ele('x://button[@data-testid="rk-auth-message-button"]').click() time.sleep(3) metamask_tab = self.get_page_tab(url='hlmhmplfebaofhhdjcmmjodfngpjlnfd') metamask_tab.ele('x://button[@data-testid="confirm-footer-button"]').click() time.sleep(3) for i in tab.cookies(): if i["name"] == "connect.sid": print(i["value"]) self.hub_web_info.cookie = i["value"] self.hub_web_info.save() except: pass finally: self.page.quit() if __name__ == '__main__': hub_web_infos = HubWeb.select().where( HubWeb.cookie.is_null() ) with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor: for hub_web_info in hub_web_infos: web_process = WebProcess(hub_web_info=hub_web_info) # web_process.action() executor.submit(web_process.action, ) time.sleep(3)