bitget_nft2
# coding: utf-8# import uiautomator2 as u2 import time from tqdm import tqdm from loguru import logger from ocr_test import OCR_UI2 class ClickTimeOutException(Exception): def __init__(self, message="This is a custom exception"): self.message = message super().__init__(self.message) def xpath是否存在(xpath,timeout=30): for index in range(0,timeout): wallet_ele = d.xpath(xpath).exists if(wallet_ele): logger.success(f"xpath已找到:{xpath}") return True else: logger.debug(f"xpath未找到 {xpath} 等待:{index}") time.sleep(1) raise ClickTimeOutException(f"xpath等待超时:找不到 {xpath} ") def click_5s_desc(xpath,timeout=20): for index in range(0,timeout): wallet_ele = d(description=xpath).exists if(wallet_ele): d(description=xpath).click() logger.success(f"{xpath} --- desc 成功点击") return True else: logger.debug(f"desc 未找到 {xpath} 等待:{index}") time.sleep(1) raise ClickTimeOutException(f"{xpath} --- desc 点击失败") def OCR_click(xpath,timeout=20): for index in range(0,timeout): find = ocr.是否存在文本(xpath) if(find): pos_x,pos_y = ocr.查询文本坐标百分比(xpath) d.click(pos_x,pos_y) logger.success(f"{xpath} --- OCR 成功点击") return True else: logger.debug(f"OCR 未找到 {xpath} 等待:{index}") time.sleep(1) raise ClickTimeOutException(f"{xpath} --- OCR 点击失败") def 领取nft(): click_5s_desc("首页",20) click_5s_desc("赚币中心") time.sleep(2) d(scrollable=True).scroll.toEnd() time.sleep(2) d.click(0.806, 0.413) d(scrollable=True).scroll.toEnd() d.xpath('//*[contains(@content-desc, "SecondLive")]//android.view.View[1]').click() d(description="以后再说").click_exists() claim = xpath是否存在('//*[@content-desc="SecondLive"]') if claim: time.sleep(1) OCR_click("验证") find = ocr.是否存在文本(d,"交互已完成") if find: return time.sleep(5) def click_5s(xpath,timeout=10,wait=0): for index in range(0,timeout): wallet_ele = d.xpath(xpath).exists if(wallet_ele): time.sleep(wait) d.xpath(xpath).click() logger.success(f"{xpath} --- 成功点击") return True else: logger.debug(f"xpath未找到 {xpath} 等待:{index}") time.sleep(1) raise ClickTimeOutException(f"{xpath} --- 点击失败") def 添加私钥(privatekey): d.app_start("com.bitkeep.wallet", use_monkey=True) d(description="暂不开启").click_exists() click_5s('//*[contains(@content-desc, "钱") and contains(@content-desc, "包") and contains(@content-desc, "我")]/android.widget.ImageView[1]',20,2) click_5s_desc("添加钱包") click_5s_desc("助记词/私钥钱包\n支持12位、24位助记词导入或私钥导入") for index in range(0, 6): d(description="0").click() click_5s('//android.widget.EditText') time.sleep(2) d.send_keys(privatekey, True) #d.set_fastinput_ime(False) click_5s_desc("确认导入") #d(scrollable=True).scroll.to(description="Polygon") click_5s('//*[@content-desc="Polygon"]') click_5s_desc("确认") click_5s_desc("开始探索") return True if __name__ == '__main__': d = u2.connect("22b4097f") ocr = OCR_UI2(d) d.set_fastinput_ime(True) print(d.info) acc_list =[] with open("address.txt","r") as f: lines = f.readlines()[691:] bar = tqdm(total = len(lines)) for line in lines: line = line.replace("\n","") addr,key = line.split("----") acc = { "private_key": key, "address": addr } acc_list.append(acc) for acc in acc_list: try: add_status = 添加私钥(acc['private_key']) if add_status: 领取nft() logger.success(f"{acc['address']} 领取nft成功!!!") d.app_stop("com.bitkeep.wallet") bar.update(1) except BaseException as e: logger.error(f"{acc['address']} 领取nft失败!!! ---- {e}") finally: try: d.app_stop("com.bitkeep.wallet") except: pass # 检查元素是否可点击
# coding: utf-8# import uiautomator2 as u2 import time from loguru import logger from cnocr import CnOcr class OCR_UI2(): def __init__(self,device): self.device = device self.ocr = CnOcr() def 计算文本中心点坐标(self,points): if len(points) == 0: return None num_points = len(points) sum_x = sum(point[0] for point in points) sum_y = sum(point[1] for point in points) centroid_x = sum_x / num_points centroid_y = sum_y / num_points return (centroid_x, centroid_y) # Example usage def 坐标转百分比(self,x,y,image): width = image.width hight = image.height pos_w = "{:.4f}".format(x/width) pos_y = "{:.4f}".format(y/hight) return (pos_w,pos_y) def 是否存在文本(self,find_str): time.sleep(1) find = False image = self.device.screenshot() outs = self.ocr.ocr(image) texts = [out['text'] for out in outs] for text in texts: if find_str in text: logger.success(f"OCR查找成功:{text} --- 预期:{find_str}") find = True return find def 查询文本坐标百分比(self,find_str): image = self.device.screenshot() outs = self.ocr.ocr(image) for line in outs: if find_str in line['text']: (x,y) = self.计算文本中心点坐标(line['position']) (pos_w,pos_y) = self.坐标转百分比(x,y,image) logger.success(f"查询坐标百分比成功:{ line['text']} --- 预期:{find_str} ---坐标:{(x,y)} --- 坐标百分比:{(pos_w,pos_y)}") return (float(pos_w),float(pos_y)) logger.debug(f"查询坐标百分比失败:预期:{find_str}") return False def 查询文本坐标(self,find_str): image = self.device.screenshot() outs = self.ocr.ocr(image) for line in outs: if find_str in line['text']: (x,y) = self.计算文本中心点坐标(line['position']) logger.success(f"查询坐标百分比成功:{ line['text']} --- 预期:{find_str} ---坐标:{(x,y)}") return (int(x),int(y)) logger.debug(f"查询坐标失败:预期:{find_str}") return False if __name__ == '__main__': d = u2.connect("5f83933a") ocr = OCR_UI2(d) ocr.查询文本坐标百分比("回家")