def switchRatioAndSavePhoto(self): poco = AndroidUiautomationPoco( use_airtest_input=True, screenshot_each_action=False ) sleep( 5 ) poco( text="图片标记" ).click() poco.swipe( [0.5, 0.7], [0.5, 0.3] ) sleep( 5 ) poco.click( [0.4, 0.4] ) poco( text="制作" ).click() sleep(2) poco( text="编辑" ).click() sleep(2) poco( text="3:4" ).click() poco( text="完成" ).click() sleep(2) poco( text="保存" ).click() sleep(2) poco( text="返回首页").click()
class AndroidPoco(): def __init__(self): self.poco = AndroidUiautomationPoco() def login_android(self): """ 使用sdk进行自动化操作的部分,对龙渊的安卓登录sdk做自动化登录使用 """ try: print('外部sdk登录流程') self.poco( "com.dragonest.autochess.google:id/ilong_username_edittext" ).set_text('testlongyuan506') self.poco( "com.dragonest.autochess.google:id/ilong_password_edittext" ).set_text('1qaz2wsx') self.poco.click([0.52, 0.6]) except Exception: print('已有账号登录')
try: install_BJ() except: log('BJ安装失败') Logging('BJ安装失败') pass ########################################################## app_id='com.bingo.scape.android.free' start_app(app_id) sleep(20) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) if login_mode=='local': if exists(Template(r"tpl1572315207964.png", record_pos=(0.002, 0.193), resolution=(2560, 1440))): poco.click([0.71,0.82]) sleep(10) else: if exists(Template(r"tpl1572315207964.png", record_pos=(0.002, 0.193), resolution=(2560, 1440))): touch(Template(r"tpl1572315207964.png", record_pos=(0.002, 0.193), resolution=(2560, 1440))) sleep(20) if exists(Template(r"tpl1572315420911.png", record_pos=(0.003, 0.171), resolution=(2560, 1440))): touch(Template(r"tpl1572315420911.png", record_pos=(0.003, 0.171), resolution=(2560, 1440))) sleep(5) if exists(Template(r"tpl1572315490218.png", record_pos=(-0.105, -0.213), resolution=(2560, 1440))): pass i =5 while True: i-=i if i==1: break
except: Logging('BP命令异常---') pass try: install_BP() except: log('BP安装失败') Logging('BP安装失败') pass app_id = 'com.bingo.tour.party.crazy.free' start_app(app_id) sleep(20) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) poco.click([0.72,0.73]) sleep(5) if poco("com.android.packageinstaller:id/permission_allow_button").exists(): poco("com.android.packageinstaller:id/permission_allow_button").click() sleep(5) #登录 if login_mode=='local': if exists(Template(r"tpl1572229515467.png", record_pos=(0.247, 0.185), resolution=(2160, 1080))): touch(Template(r"tpl1572229515467.png", record_pos=(0.247, 0.185), resolution=(2160, 1080))) sleep(10) else: if exists(Template(r"tpl1572229536170.png", record_pos=(-0.0, 0.172), resolution=(2160, 1080))): touch(Template(r"tpl1572229536170.png", record_pos=(-0.0, 0.172), resolution=(2160, 1080))) sleep(30) sleep(5) while True:
resolution=(1440, 2560))): touch( Template(r"tpl1574058712020.png", record_pos=(0.005, -0.183), resolution=(1440, 2560))) sleep(30) if exists( Template(r"tpl1574058825058.png", record_pos=(0.428, -0.398), resolution=(1440, 2560))): touch( Template(r"tpl1574058825058.png", record_pos=(0.428, -0.398), resolution=(1440, 2560))) sleep(5) poco.click([0.5, 0.8]) sleep(5) if exists( Template(r"tpl1574059020273.png", record_pos=(0.179, -0.848), resolution=(1440, 2560))): poco.click([0.66, 0.024]) poco.click([0.66, 0.024]) poco.click([0.66, 0.024]) poco.click([0.66, 0.024]) sleep(5) if exists( Template(r"tpl1574063488989.png", record_pos=(0.008, 0.41), resolution=(1440, 2560))):
class TaoBao(object): def __init__(self, key, *args): self.poco = AndroidUiautomationPoco(screenshot_each_action=False) auto_setup(__file__) # 搜索关键字 self.key = key # 浏览商品详情的时间,默认时长为20s if len(args) == 1 or len(args) == 2: self.browser_detail_time = args[0] else: self.browser_detail_time = 20 # 浏览评论的时长,默认时长为5s self.browser_evalute_time = args[1] if len(args) == 2 else 5 # 待匹配的商品主图 self.main_img_path = '' def run(self): # 1、准备工作,打开淘宝客户端 self.__pre() # 2、根据关键字,搜索商品 self.__search_good_by_key() # 3、剪切图片,拿到商品主图 self.main_img_path = crop_main_img('./333.jpeg') # 4、滑动,从列表中匹配商品 self.__search_good_from_list() # 5、收藏商品 self.__collect_good() # 6、浏览商品 self.__browser_good_detail() # 7、查看评论 self.__browser_good_evalute() # 8、购买 self.__buy_good() # 9、获取订单编号 order_no = self.__get_order_no() # 10、截取订单截图页面 screenshot_pic_result = self.get_order_pic() print(f'购买完成!\n订单号为:{order_no}\n订单截图路径:{screenshot_pic_result}') def __collect_good(self): """ 收藏商品 :return: """ # 滑动一次,使顶部Tab显示出来 self.__swipe(True) self.__swipe(True) # 判断商品是否收藏 fav_element = self.poco('com.taobao.taobao:id/fav_title') if fav_element.get_text() == '收藏': print('开始收藏...') fav_element.parent().children()[0].click() back_keyevent() else: print('商品已经收藏') def __pre(self): """ 准备工作 :return: """ # 删除缓存文件 remove_cache('./part.jpg', './screenshot.png', './uidump.xml') home() stop_app(package_name) start_my_app(package_name, activity) def __search_good_by_key(self): """ 通过关键字搜索商品 :return: """ self.poco(id_page_main_button_search).wait(5).click() # perform_view_id_click(poco, id_page_main_button_search) perform_view_input(self.poco, id_page_search_edittext_search, self.key) # 点击搜索 self.poco(id_page_search_button_search).wait_for_appearance() while self.poco(id_page_search_button_search).exists(): print('点击一次搜索') perform_view_id_click(self.poco, id_page_search_button_search) # 等待列表加载出来 self.poco(id_page_goods_rv).wait_for_appearance() def __search_good_from_list(self): """ 从列表中匹配商品 :return: """ # 循环的图片查找 while True: try: pos = loop_find(Template(self.main_img_path), timeout=10, threshold=0.95) except TargetNotFoundError: print('滑动一页') # self.poco.swipe([0.5, 0.8], [0.5, 0.4], duration=0.2) self.__swipe(True) else: print('找到了') # poco.click([100.0 / 1920, 100.0 / 1080]) print(pos) # 屏幕宽度和高度 screen_size = self.poco.get_screen_size() print(screen_size) # 点击的坐标点(宽、高) # (0.22407407407407406, 0.8550925925925926) position_click = (pos[0] / screen_size[0], pos[1] / screen_size[1]) print(position_click) self.poco.click(position_click) break def __swipe(self, up_or_down): """ 滑动单条新闻 :param up_or_down: true:往上滑动;false:往下滑动【慢慢滑动】 :return: """ if up_or_down: self.poco.swipe([0.5, 0.8], [0.5, 0.4], duration=0.2) else: self.poco.swipe([0.5, 0.4], [0.5, 0.8], duration=0.2) def __browser_good_detail(self): """ 浏览商品 :return: """ # 切换到详情Tab self.poco('com.taobao.taobao:id/taodetail_nav_bar_tab_text', text='详情').click() # 滑动时长为: self.browser_detail_time browser_start = datetime.datetime.now() browser_end = browser_start while (browser_end - browser_start).seconds < self.browser_detail_time: # 休眠一会 time.sleep(random.randint(2, 5)) # 滑动一次 self.__swipe(True) # 结束时间 browser_end = datetime.datetime.now() print('详情页面查看完毕') def __browser_good_evalute(self): """ 查看评论 :return: """ print('查看评论') # 切换到详情Tab self.poco('com.taobao.taobao:id/taodetail_nav_bar_tab_text', text='评价').click() # 查看全部评论 self.poco('com.taobao.taobao:id/mainpage').offspring( text='查看全部').click() browser_start = datetime.datetime.now() browser_end = browser_start while (browser_end - browser_start).seconds < self.browser_evalute_time: # 休眠一会 time.sleep(random.randint(2, 5)) # 滑动一次 self.__swipe(True) # 结束时间 browser_end = datetime.datetime.now() print('评价页面查看完毕') def __buy_good(self): """ 购买商品 :return: """ # 立即购买 self.poco('com.taobao.taobao:id/detail_main_sys_button', text='立即购买').click() # 选择商品属性 sleep(10) # 确定购买 self.poco('com.taobao.taobao:id/confirm_text', text='确定').parent().click() # 提交订单 self.poco(text='提交订单').click() # 手动输入密码或者指纹 sleep(10) def __get_order_no(self): """ 获取订单编号 :return: """ global copy_element while True: # 由于手机屏幕的限制,【复制】按钮第一页不一定能显示出来 try: copy_element = self.poco(text='复制') except Exception as e: print('没有找到元素,往下滑动一页') self.__swipe(True) break copy_element.click() # 从剪切板拿到数据 result = exec_cmd('adb shell am broadcast -a clipper.get')[1] # 匹配出订单号 result = re.findall(r'data="(.*)"', result) order_no = '' if result and len(result) > 0: order_no = result[0] print(order_no) return order_no def get_order_pic(self): """ 拿到订单截图界面 :return: """ screenshot_pic_result = './order_screenshot.png' # 截取手机当前屏幕 exec_cmd('adb shell /system/bin/screencap -p /sdcard/screenshot.png') # 保存到PC端 exec_cmd('adb pull /sdcard/screenshot.png %s' % screenshot_pic_result) return screenshot_pic_result
pass #安装Binggoblaze try: install_BB() except: log('BB安装失败') Logging('BB安装失败') pass ####################################################### app_id='com.bingo.blaze.free' time=5 start_app(app_id) sleep(20) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) poco.click([0.72,0.73]) sleep(5) if poco("com.android.packageinstaller:id/permission_allow_button").exists(): poco("com.android.packageinstaller:id/permission_allow_button").click() sleep(5) if login_mode=='local': if exists(Template(r"tpl1572246984758.png", record_pos=(0.243, 0.104), resolution=(2560, 1440))): poco.click([0.74,0.86]) sleep(10) else: if exists(Template(r"tpl1572246984758.png", record_pos=(0.243, 0.104), resolution=(2560, 1440))): touch(Template(r"tpl1572246984758.png", record_pos=(0.243, 0.104), resolution=(2560, 1440))) sleep(20) while True:
app_id='com.huge.slots.casino.vegas.android.avidly' start_app(app_id) sleep(15) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) if exists(Template(r"tpl1572321674058.png", record_pos=(0.006, 0.219), resolution=(2560, 1440))): touch(Template(r"tpl1572321674058.png", record_pos=(0.006, 0.219), resolution=(2560, 1440))) sleep(3) if login_mode=='facebook': if exists(Template(r"tpl1572321720658.png", record_pos=(0.018, 0.203), resolution=(2560, 1440))): touch(Template(r"tpl1572321720658.png", record_pos=(0.018, 0.203), resolution=(2560, 1440))) sleep(30) else: if exists(Template(r"tpl1572321720658.png", record_pos=(0.018, 0.203), resolution=(2560, 1440))): poco.click([0.73, 0.85]) sleep(30) if exists(Template(r"tpl1572321920350.png", record_pos=(-0.004, 0.166), resolution=(2560, 1440))): touch(Template(r"tpl1572321920350.png", record_pos=(-0.004, 0.166), resolution=(2560, 1440))) sleep(5) sleep(20) i = 11 while True: i-=1 if i==1: break keyevent("BACK") sleep(1) poco.click([0.04,0.16]) if exists(Template(r"tpl1572594865097.png", record_pos=(0.255, -0.192), resolution=(2560, 1440))):
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) #功能:切换比例保存图片: #步骤:首页点击图片标记--滑动相册页--点击一张图片--点击制作--点击编辑--切换比例3:4--点击完成--点击保存--验证保存成功--点击返回首页 # def switchRatioAndSavePhoto(self): # poco( text="图片标记" ).click() # poco.swipe( [0.5, 0.7], [0.5, 0.3] ) # sleep( 5 ) # poco.click( [0.4, 0.4] ) # poco( text="制作" ).click() # poco( text="编辑" ).click() # poco( text="3:4" ).click() # poco( text="完成" ).click() # poco( text="保存" ).click() # assert_exists(Template(r"tpl1562829085071.png", record_pos=(0.015, -0.099), resolution=(1080, 2160)), "切换比例测试") # poco( text="返回首页").click() poco(text="图片标记").click() poco.swipe([0.5, 0.7], [0.5, 0.3]) sleep(5) poco.click([0.4, 0.4]) poco(text="制作").click() poco(text="编辑").click() poco(text="3:4").click() poco(text="完成").click() poco(text="保存").click() assert_exists( Template(r"tpl1562829085071.png", record_pos=(0.015, -0.099), resolution=(1080, 2160)), "切换比例测试") poco(text="返回首页").click()
class AirtestPoco(object): """ Airtest和Poco的方法集合 airtest-api self.api,methods poco-Selector text, textMatches """ def __init__(self, device): """ init初始化 """ # 设置日志目录 set_logdir(AIRTEST_LOG) # 删除旧日志 clear_log(ST.LOG_DIR) # 初始化日志 init_logging() # 等待显示时间 self.timeout = ST.FIND_TIMEOUT # airtest-api self.api = api self.poco = AndroidUiautomationPoco(device, use_airtest_input=True, screenshot_each_action=False) self.UIObj = UIObjectProxy(poco=self.poco) """ AirTest-Method 封装的都是跟图片相关的 """ @classmethod def temp(cls, img_name: str, rgb: bool = True, record_pos: tuple = (0.5, -0.5), resolution: tuple = airDev.screen, target_pos=TargetPos.MID): """CV识别主函数 :param rgb: 灰度识别还是色彩识别 :param record_pos: 图片坐标 :param img_name: 图片名称 :param target_pos: :param resolution: 设备分辨率 :return: """ temp = Template(r"%s" % img_name, target_pos=target_pos, record_pos=record_pos, resolution=resolution, rgb=rgb) return temp @allure.step("元素点击:") def touch(self, v: Template, **kwargs): """ 在设备屏幕上执行触摸操作 :param v: 要触摸的目标,可以是Template实例,也可以是绝对坐标(x,y) :param kwargs: [times 要执行多少次触摸] """ self.api.touch(v, **kwargs) @allure.step("输入文本:") def text(self, text, enter=True, **kwargs): """ 目标设备上的输入文本。文本输入部件必须首先是活动的。 :param text: 输入文本,支持unicode :param enter:输入' enter '键事件后文本输入,默认为真 :param kwargs: :return: :platforms: Android, Windows, iOS """ self.api.text(text, enter=enter, **kwargs) self.api.sleep() @allure.step("双击元素:") def double_click(self, v: Template): """双击""" self.api.double_click(v) @allure.step("滑动元素:") def swipe(self, v1, v2=None, vector=None, **kwargs): """ 在设备屏幕上执行滑动操作。 分配参数有两种方法 swipe(v1, v2=Template(...)) #从v1滑动到v2 swipe(v1, vector=(x, y)) #滑动从v1开始并沿向量移动。 :param:v1 –滑动的起点,可以是Template实例,也可以是绝对坐标(x,y) :param:v2 –滑动的终点,可以是Template实例,也可以是绝对坐标(x,y) :param:vector - 向量 –滑动动作的向量坐标,可以是绝对坐标(x,y)或屏幕百分比,例如(0.5,0.5) :param:**kwargs – 平台特定的kwargs,请参考相应的文档 :exception: 异常 –如果提供的参数不足以执行交换操作,则为一般异常 平台: Android,Windows,iOS :return: 原点位置和目标位置 """ if v1.endswith('.png'): v1 = self.temp(v1) if v2.endswith('.png'): v2 = self.temp(v2) return self.api.swipe(v1, v2, vector, **kwargs) @allure.step("等待元素:") def wait(self, v: Template, **kwargs): """ 等待与设备屏幕上的模板匹配 :param v –等待的目标对象,模板实例 :param 超时 –等待比赛的时间间隔,默认为无,即ST.FIND_TIMEOUT :param interval –尝试找到匹配项的时间间隔(以秒为单位) :param intervalfunc –在每次未成功尝试找到相应匹配项后调用 """ self.api.wait(v, **kwargs) @allure.step("元素存在:") def exists(self, v: Template): """ 检查设备屏幕上是否存在给定目标 :param v –检查对象 :return 如果找不到目标,则为False,否则返回目标的坐标 """ return self.api.exists(v) @allure.step("断言目标存在:") def assert_exists(self, v: Template, msg: str = None): """ 断言目标存在于设备屏幕上 :param v –要检查的目标 :param msg –断言的简短描述,它将记录在报告中 """ self.api.assert_exists(v, msg) @allure.step("断言目标不存在:") def assert_not_exists(self, v: Template, msg: str = None): """ 断言目标在设备屏幕上不存在 :param v –要检查的目标 :param msg –断言的简短描述,它将记录在报告中 """ self.api.assert_not_exists(v, msg) @allure.step("查找所有匹配的:") def find_all(self, v: Template): """ 在设备屏幕上查找目标的所有位置并返回其坐标 :param v:要查找的目标 :return:坐标列表,[(x,y),(x1,y1),…] :平台:Android、Windows、iOS """ return self.api.find_all(v) def capture_screenshot(self, bs64=True): """ 截图保存为base64 :return: """ filename = self.api.snapshot()['screen'] filepath = os.path.join(ST.LOG_DIR, filename) allure.attach.file(filepath, "截图" + filename, allure.attachment_type.JPG) if bs64: with open(filepath, 'rb') as f: imagebase64 = base64.b64encode(f.read()) return imagebase64.decode() """ poco-method """ @allure.step("poco等待一个元素显示:") def poco_wait_any(self, objects: list): """ 等待,直到所有给定的一个 UI 代理在超时之前显示。将定期轮询所有 UI 代理。 :param objects: :return: bool """ try: return self.poco.wait_for_any(objects, timeout=self.timeout) except poco_exception.PocoTargetTimeout: return False @allure.step("poco等待多个元素显示:") def poco_wait_all(self, objects: list): """ 等待,直到所有给定的所有 UI 代理在超时之前显示。将定期轮询所有 UI 代理。 :param objects: :return: """ try: self.poco.wait_for_all(objects, timeout=self.timeout) return True except poco_exception.PocoTargetTimeout: return False def poco_obj(self, **kwargs): """poco实例""" if 'index' in kwargs: index = kwargs.pop('index') ele = self.poco(**kwargs)[index] else: ele = self.poco(**kwargs) ele.wait_for_appearance(timeout=self.timeout) return ele @allure.step("poco点击元素:") def poco_click(self, **kwargs): """ 对由UI代理表示的UI元素执行click操作。如果这个UI代理代表一组 UI元素,单击集合中的第一个元素,并将UI元素的定位点用作默认值 一个。还可以通过提供“focus”参数单击另一个点偏移。 :param kwargs: [text, name] """ log("点击元素:{}".format(kwargs)) self.poco_obj(**kwargs).click() self.poco.sleep_for_polling_interval() @allure.step("poco点击pos:") def poco_click_pos(self, pos): """ 在给定坐标下对目标设备执行单击(触摸,轻击等)操作。坐标(x, y)是一个2-列表或2-元组。 x和y的坐标值必须在0 ~ 1之间,以表示屏幕的百分比。 例如: 坐标[0.5,0.5]表示屏幕的中心,坐标[0,0]表示左上角。 有关坐标系统的详细信息,请参阅CoordinateSystem。 实际案例: 单击分辨率为(1920,1080)的屏幕的(100,100)点: poco.click([100.0 / 1920, 100.0 / 1080]) :param pos: (list(float, float) / tuple(float, float)) – coordinates (x, y) in range of 0 to 1 :return: """ self.poco.click(pos) self.poco.sleep_for_polling_interval() @allure.step("poco获取元素文本:") def poco_text(self, **kwargs): """ 获取 UI 元素的文本属性。如果没有此类属性,则返回"无"。 :param kwargs: :return: txt """ txt = self.poco_obj(**kwargs).get_text() log("获取元素{}文本:{}".format(kwargs, txt)) return txt @allure.step("poco获取元素属性:") def poco_attr(self, name, **kwargs): """ 按给定属性名称检索 UI 元素的属性。如果属性不存在,则返回"无"。 visible:用户是否可见 text:UI 元素的字符串值 type:远程运行时的 UI 元素的类型名称 pos:UI 元素的位置 size:根据屏幕,0+1 范围内的百分比大小 [宽度、高度] name:UI 元素的名称 ...: other sdk 实现的属性 :return: """ return self.poco_obj(**kwargs).attr(name) def poco_freeze(self, **kwargs): """冻结UI树并返回当前的UI结果树""" with self.poco.freeze() as freeze: return freeze(**kwargs) def poco_hierarchy_dict(self): """获取当前结构树的字典""" frozen_poco = self.poco.freeze() hierarchy_dict = frozen_poco.agent.hierarchy.dump() return hierarchy_dict @allure.step("poco元素存在:") def poco_exists(self, **kwargs): """ 测试UI元素是否在层次结构中 :param kwargs: [text,name] """ result = self.poco_freeze(**kwargs).exists() log("元素{}验证结果: {}".format(kwargs, result)) return result @allure.step("poco滚动屏幕:") def poco_scroll(self, direction: str = 'vertical', percent: float = 0.5, duration: float = 2.0): """ 从整个屏幕的下部滚动到上部 默认的 direction='vertical', percent=0.6, duration=2.0 :param direction: 方向:滚动方向。垂直(vertical)或“水平”(horizontal) :param duration: 百分比:根据 :param percent: 持续时间:执行操作的时间间隔 """ self.poco.scroll(direction=direction, percent=percent, duration=duration) @allure.step("poco滑动:") def poco_swipe(self, p1, p2=None, direction=None, duration: float = 2.0): """ 在目标设备上通过起点和终点或方向向量指定的点到点执行滑动操作。必须至少提供端点或方向之一。 点的坐标(x,y)定义与click事件的定义相同。方向矢量(x,y)的分量也以0到1的屏幕范围表示。 请参阅CoordinateSystem以获取有关坐标系的更多详细信息。 实际案例 以下示例显示了如何在分辨率为1920x1080的屏幕上执行从(100,100)到(100,200)的滑动动作: poco.swipe([100.0 / 1920, 100.0 / 1080], [100.0 / 1920, 200.0 / 1080]) 或由特定方向而非终点给定: poco.swipe([100.0 / 1920, 100.0 / 1080], direction=[0, 100.0 / 1080]) :param p1: 起点 :param p2: 终点 :param direction: 滑动方向 :param duration: 持续时间(float)–执行滑动操作的时间间隔 """ self.poco.swipe(p1=p1, p2=p2, direction=direction, duration=duration) """ aircv-method """ @allure.step("元素截图:") def crop_image(self, rect: list): """局部截图 :param rect = [x_min, y_min, x_max ,y_max]. :return filepath 图片路径 """ # 局部截图 img = G.DEVICE.snapshot() crop_screen = crop_image(img, rect) # 生成截图路径 filename = "%(time)d.jpg" % {'time': timestamp() * 1000} filepath = os.path.join(ST.LOG_DIR, filename) # 保存局部截图到logs文件夹中 pil_image = cv2_2_pil(crop_screen) pil_image.save(filepath, quality=99, optimize=True) return filepath @allure.step("图片文字识别:") def tesseract_string(self, filepath, lang='eng+chi_sim', config='--psm 6'): """识别图片文字""" # 读取图片 im = Image.open(filepath) # 识别图片文字 # 进行置灰处理 im = im.convert('L') # 这个是二值化阈值 threshold = 150 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) # 通过表格转换成二进制图片,1的作用是白色,0就是黑色 im = im.point(table, "1") result = pytesseract.image_to_string(im, lang=lang, config=config) # 返回并清除结果的空格 return result.replace(" ", "")
driver.snapshot('****************************************************************') for i in range (10): driver.airtest_touch(Template(r"tpl1573711061814.png", record_pos=(1.429, 0.566), resolution=(913, 897))) driver.snapshot('****************************************************************') sleep(5) Logging("清空数据") driver.find_element_by_name("cleardata").click() sleep(5) driver.snapshot() ######################################################### #facebook if exists(Template(r"tpl1574323010154.png", record_pos=(-0.416, -0.658), resolution=(1440, 2560))): touch(Template(r"tpl1574323010154.png", record_pos=(-0.416, -0.658), resolution=(1440, 2560))) sleep(3) poco.click([0.72,0.15]) sleep(3) poco.click([0.5,0.5]) touch(Template(r"tpl1574323095174.png", record_pos=(-0.001, 0.092), resolution=(1440, 2560))) sleep(20) if exists(Template(r"tpl1574323204692.png", record_pos=(0.402, -0.58), resolution=(1440, 2560))): touch(Template(r"tpl1574323204692.png", record_pos=(0.402, -0.58), resolution=(1440, 2560))) poco.click([0.89,0.17]) sleep(3) if exists(Template(r"tpl1574323291679.png", record_pos=(-0.012, 0.119), resolution=(1440, 2560))): touch(Template(r"tpl1574323291679.png", record_pos=(-0.012, 0.119), resolution=(1440, 2560))) sleep(5) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) buy_coin()#购买金币
sleep(15) if exists( Template(r"tpl1574062951883.png", record_pos=(0.003, -0.042), resolution=(1440, 2560))): touch( Template(r"tpl1574062951883.png", record_pos=(0.003, -0.042), resolution=(1440, 2560))) sleep(10) if exists( Template(r"tpl1574063071643.png", record_pos=(-0.228, -0.069), resolution=(1440, 2560))): poco.click([0.27, 0.36]) sleep(3) touch( Template(r"tpl1574063071643.png", record_pos=(-0.228, -0.069), resolution=(1440, 2560))) sleep(3) text("*****@*****.**") touch( Template(r"tpl1574063314161.png", record_pos=(-0.198, 0.068), resolution=(1440, 2560))) sleep(3) text("ayw123456") sleep(3) touch(
Logging('TBC命令异常---') pass try: install_TBC() except: log('TBC安装失败') Logging('TBC安装失败') pass #################################################################### app_id ='com.toybrickcrush.casual.avidly' start_app(app_id) sleep(30) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) poco.click([0.49,0.58]) sleep(5) touch(Template(r"tpl1571380055680.png", record_pos=(-0.05, -0.924), resolution=(1440, 2880))) sleep(5) if exists(Template(r"tpl1571380134096.png", record_pos=(0.265, 0.298), resolution=(1440, 2880))): touch(Template(r"tpl1571380134096.png", record_pos=(0.265, 0.298), resolution=(1440, 2880))) elif exists(Template(r"tpl1571380226587.png", record_pos=(0.263, 0.714), resolution=(1440, 2880))): touch(Template(r"tpl1571380226587.png", record_pos=(0.263, 0.714), resolution=(1440, 2880))) else: touch(Template(r"tpl1571380299942.png", record_pos=(0.201, -0.529), resolution=(1440, 2880))) sleep(10) if poco('一键购买').exists(): poco('一键购买').click()
imgcon = cv2.imread('temp.jpg', 0) realImg = imgcon[100:1300, 180:540] template = cv2.imread(tep_list[tep_num], 0) w, h = template.shape[::-1] res = cv2.matchTemplate(realImg, template, cv2.TM_CCOEFF) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) top_left = max_loc bottom_right = (top_left[0] + w, top_left[1] + h) cv2.rectangle(realImg, top_left, bottom_right, 255, thickness=2) # pos = [top_left[0] + w / 2, top_left[1] + h / 2] print(max_val) plt.subplot(223), plt.imshow(res, cmap="gray") plt.title('Matching Result'), plt.xticks([]), plt.yticks([]) # plt.subplot(224), plt.imshow(realImg, cmap="gray") # plt.title('Detected Point'), plt.xticks([]), plt.yticks([]) # plt.show() if max_val < 20000000: return False else: return True while True: get_sc() for i in range(0, 3): if is_match(i): poco.click(touch_list[i]) time.sleep(0.6)
def place_order(device): '''游戏内操作充值''' order_id=None#默认为None sleep(3.0) try: connect_device("Android:///"+device) auto_setup(__file__) poco=AndroidUiautomationPoco() sleep(1.8) #先判断是否有商城按钮 if exists(Template(r"mxd_商城按钮.png", threshold=0.6,record_pos=(0.345, -0.226), resolution=(1280, 720))): print('{}--{}找到商城入口按钮'.format(os.getpid(),device)) touch(Template(r"mxd_商城按钮.png", threshold=0.6,record_pos=(0.345, -0.226), resolution=(1280, 720))) sleep(2.0) touch(Template(r"mxd_充值按钮.png", record_pos=(0.428, 0.066), resolution=(1280, 720))) sleep(2.0) #直接通过头像位置进入充值档位 elif exists(Template(r"mxd_游戏内任务.png",record_pos=(0.334, 0.231), resolution=(1280, 720)),30): print('{}--{}没有找到商城-直接通过头像位置进入充值档位'.format(os.getpid(),device)) poco.click([0.033,0.087]) sleep(2.0) poco.click([0.918,0.038]) sleep(2.0) else: print('%s--在游戏内找不到元素_可能原因:实名制弹窗|游戏副本加载页|游戏不固定元素蒙层|网络异常弹框蒙层'%device) img=Screencap.GetScreen(time.time(), device, "True") return False,device+'在游戏内找不到元素_可能原因:实名制弹窗|游戏副本加载页|游戏不固定元素蒙层|网络异常弹框蒙层',img[img.find(r'superdalan.com//')+16:][:-4] #创建线程获取日志 t = threading.Thread(target=get_order_log.say,args=('eve',device)) t.setDaemon(True) t.start() sleep(1.8) if exists(Template(r"mxd_6元按钮.png", record_pos=(-0.306, 0.037), resolution=(1280, 720))): print('{}--{}进入充值档位页面'.format(os.getpid(),device)) touch(Template(r"mxd_6元按钮.png", record_pos=(-0.306, 0.037), resolution=(1280, 720))) #判断是否弹出支付方式 if poco(text="微信").wait(8).exists(): print('{}--{}拉起支付方式弹窗成功'.format(os.getpid(),device)) poco(text="微信").click() time.sleep(4) else: print('{}--{}拉起支付方式失败'.format(os.getpid(),device)) t.join() print('{}___主线程结束___'.format(device)) path=os.path.dirname(__file__) #----------------打开文件读取数据----------------------- with open(path+'/order_log/'+device+'.txt',mode="r",encoding="UTF-8",errors="ignore") as abc: fileContent=abc.readlines() #---------------筛选mPayInfo pay日志的内容------------------------- for i in range(len(fileContent)): if 'union_order_sn' in fileContent[i]: pattern = re.compile('"union_order_sn":"([0-9]{15,20})')#正则表达式实例 result = pattern.findall(fileContent[i])#匹配的字符串 order_id=''.join(result) print('%s登录order_id=%s'%(device,order_id)) break else: print('{}日志文件是空的_没有获取到order_id'.format(device)) for i in range(5): sleep(4.0) if poco(text="登录").exists(): print('%s当前未登录微信'%device) img=Screencap.GetScreen(time.time(), device, "") return True,order_id,img[img.find(r'superdalan.com//')+16:][:-4] elif poco(text="立即支付").exists(): img=Screencap.GetScreen(time.time(), device, "") return True,order_id,img[img.find(r'superdalan.com//')+16:][:-4] else: img=Screencap.GetScreen(time.time(), device, "") return False, device+'微信无法调起!,手机反应太慢_超时',img[img.find(r'superdalan.com//')+16:][:-4] except: img=Screencap.GetScreen(time.time(), device, "") print('{}--{}--已走异常流程_截图异常页面(原因:主要是因为没有进入指定页面_)'.format(os.getpid(),device)) return False,device+'由于网络原因,或手机反应慢到导致元素无法找到_超时',img[img.find(r'superdalan.com//')+16:][:-4]