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.查询文本坐标百分比("回家")

  

posted @ 2024-03-15 14:24  冷光清坠落  阅读(7)  评论(0编辑  收藏  举报