class SmallTarget(object): def __init__(self): try: self.poco = AndroidUiautomationPoco(screenshot_each_action=False) self.adb = AdbUtils() auto_setup(__file__) self.connected = True except Exception as e: Logger.e('连接设备失败', e) self.connected = False self.prepared = False self.readCount = 0 self.money = 0 def run(self): if not self.connected: Logger.e('达目标自动围观失败', '连接设备失败,无法执行') return self._pre() if not self.prepared: return self._go_to_message_list() self._exit() def _exit(self): home() self.adb.sendKeyEvent(POWER) self.poco.stop_running() def _pre(self): """ 准备工作 :return: """ if not self.adb.isInstall(package_name): Logger.e('达目标自动围观失败', '未安装{},无法执行'.format(package_name)) return self.prepared = True #解锁手机 self.adb.unlockPhone() # # 删除缓存文件 # remove_dir('./temp/') home() stop_app(package_name) start_target_app(package_name, activity) def _go_to_message_list(self): """ 将新的围观设置为已读 """ self.poco(id_page_message_tab).wait(1).click() get_screenshot_pic('temp/{}.png'.format(int(time.time()))) if self.poco(id_page_unread_message_num).exists(): #有未读新消息 perform_view_id_click(self.poco, id_page_my_message_btn) # 等待列表加载出来 self.poco(id_page_my_follow_message_list).wait_for_appearance() self._loop_read_message() follow_info = self.poco(id_page_my_follow_info).get_text().strip() follows = follow_info.split('/') need_new_follow = int(follows[1]) - int(follows[0]) if need_new_follow > 0: self._find_people_to_follow(need_new_follow) follow_money_info = self.poco( id_page_my_follow_money_info).get_text().strip() self.money = float(follow_money_info.split('¥')[1]) Logger.v('达目标当前围观收入' + follow_money_info) self.adb.sendKeyEvent(BACK) else: Logger.v('达目标当前没有未读围观消息') def _loop_read_message(self): """ 将所有消息设置为已读 :return: """ now = time.strftime('%Y-%m-%d', time.localtime(time.time())) items = self.poco(id_page_my_follow_message_list).children() finished = False for item in items: try: item_time_info = item.offspring( id_page_my_follow_message_item_time).get_text().strip() item_time = item_time_info.split(' ')[0] if self.poco(id_page_my_follow_message_item_new).exists() or ( item_time == now): item.click() self.poco(id_page_my_follow_message_detail ).wait_for_appearance() self._read_message_detail() else: finished = True break except Exception as e: print(e) if not finished: time.sleep(1) self.adb.swipeByRatio(0.5, 0.8, 0.5, 0.42) time.sleep(1) self._loop_read_message() def _read_message_detail(self): time.sleep(random.randint(2, 5)) self.adb.swipeToUp() if random.choice([1, 2, 3]) == 3: self.poco(id_page_my_follow_message_detail_money_btn).sibling( id_page_my_follow_message_detail_zan_btn).click() self.readCount += 1 self.adb.sendKeyEvent(BACK) def _find_people_to_follow(self, count): Logger.v('达目标尝试新围观{}人'.format(count)) self.poco(id_page_home_tab).wait(1).click() self.poco(id_page_my_follow_message_list).wait_for_appearance() for index in range(count): self._find_one_to_follow() def _follow_new(self): result = False try: # self.adb.swipeToDown() money_node = self.poco(id_page_follow_detail_money_info) money_node.wait_for_appearance(5) money_des = money_node.get_text().strip() money = 0 if '¥' in money_des: money = money_des.split('¥')[1] else: money = money_des.split(' · ')[2].split('元')[0] result = float(money) >= FOLLOW_MONEY if result: Logger.v('达目标找到值得围观的人了:' + money) except Exception as e: print('_follow_new', e) finally: self.adb.sendKeyEvent(BACK) return result def _find_one_to_follow(self): #添加新的围观 message_node = self.poco(id_page_my_follow_message_list) message_node.wait_for_appearance() items = message_node.children() success = False for item in items: try: btn_info = item.offspring(id_page_home_tab_item_follow_btn) if len(btn_info.children()) > 0: item.click() if self._follow_new(): success = True btn_info.click() self.poco(id_modal_follow_result_content ).wait_for_appearance() Logger.v('达目标新围观成功') self.adb.sendKeyEvent(BACK) break except Exception as e: print('_find_one_to_follow', e) if not success: time.sleep(1) self.adb.swipeByRatio(0.5, 0.8, 0.5, 0.421) time.sleep(1) self._find_one_to_follow()
class Wechat(object): def __init__(self): try: self.poco = AndroidUiautomationPoco(screenshot_each_action=False) self.adb = AdbUtils() auto_setup(__file__) self.connected = True except: self.connected = False def runFunc(self, funcName, **args): if not self.connected: print('连接设备失败,无法执行') return self._pre() func = getattr(self, funcName, None) if not func is None: func(**args) def _exit(self): home() self.adb.sendKeyEvent(POWER) self.poco.stop_running() def _pre(self): if not self.adb.isInstall(package_name): print('未安装{},无法执行'.format(package_name)) return #解锁手机 self.adb.unlockPhone() # # 删除缓存文件 # remove_dir('./temp/') home() # stop_app(package_name) start_target_app(package_name, activity) def _toHomePage(self): sleep(1) if self.poco(id_wechat_bottom_tabs).exists(): return else: self.adb.sendKeyEvent(BACK) self._toHomePage() def __toUserFromSearch(self, user): self.poco(id_wechat_search_btn).click() self.poco(id_wechat_search_txt).wait_for_appearance() perform_view_input(self.poco, id_wechat_search_txt, user) self.poco(id_wechat_search_result_list).wait_for_appearance() items = self.poco(id_wechat_search_result_list).children() for item in items: try: item_info_text = item.offspring( id_wechat_search_result_item_txt).get_text().strip() if item_info_text == user: item.click() return True except Exception as e: print(e) return False def __toUserFromRecent(self, user): self.poco(id_wechat_recent_message_list).wait_for_appearance() items = self.poco(id_wechat_recent_message_list).children() for item in items: try: item_info_text = item.child().child().offspring( id_wechat_recent_message_item_txt).get_text().strip() if item_info_text == user: item.click() return True except Exception as e: print(e) return False def _goToUser(self, user): self._toHomePage() self.poco(id_wechat_tab1_btn).click() return self.__toUserFromRecent(user) or self.__toUserFromSearch(user) def _sendText(self, to, text): if to is None: print('未指定对象,无法发送') return if text is None: print('发送内容为空无法发送') return if not self._goToUser(to): print('未找到指定对象') return self.poco(id_wechat_message_txt).wait_for_appearance() perform_view_input(self.poco, id_wechat_message_txt, text) self.poco(id_wechat_message_send_btn).click() def _makeVideoCall(self, to): if to is None: print('未指定对象,无法拨打') return if not self._goToUser(to): print('未找到指定对象') return self.poco(id_wechat_message_txt).wait_for_appearance() self.poco(id_wechat_message_more_entrance_btn).click() self.poco(id_wechat_message_more_func_list).wait_for_appearance() items = self.poco(id_wechat_message_more_func_list).children() for item in items: try: item_info_text = item.child().child().offspring( id_wechat_message_more_func_item_txt).get_text().strip() if item_info_text == '视频通话': item.click() break except Exception as e: print(e)