Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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)