应用宝自动下载安装

import uiautomator2 as u2
from threading import  Thread
import logging
import sys
import os
logger=logging.getLogger("uiautomator2")
logger.setLevel(logging.INFO)
d = u2.connect()

"""下载模块"""
class yingyongbao(object):
#初始化屏幕尺寸
    def __init__(self):
        self.width, self.height = d.window_size()
        print(self.width,self.height) #720 1600
        #os.system("python -m uiautomator2 init")
        # width=0.15*width
        # height=0.95*height
        # print(width,height)  #108.0 1520.0
    def get_path(self):
        self.basedir = os.path.dirname(os.path.abspath(__file__))

    def get_screen_path(self):
        screen_path = os.path.join(self.basedir,'log')
        if not os.path.exists(screen_path):
            os.mkdir(screen_path)
        return screen_path

    def get_error_result(self):
        error_path = os.path.join(self.basedir, 'screen')
        if not os.path.exists(error_path):
            os.mkdir(error_path)
        return error_path

    # def init_device(self):
    #     os.system("python -m uiautomator2 init")

    def start_yingyongbao(self):
        try:
            os.system("python -m uiautomator2 init")
            file_path=input("请输入需要下载的文本路径:")
            with open(file_path, 'r') as f:
                self.package_list = f.readlines()

            d.shell("pm grant com.tencent.android.qqdownloader android.permission.'POST_NOTIFICATIONS'")
            d.app_clear("com.tencent.android.qqdownloader")

            d.app_start("com.tencent.android.qqdownloader", wait=True)
            d.sleep(8)
            try:
                if "应用宝" == d.xpath('//*[@resource-id="android:id/alertTitle"]').get_text():
                    d.xpath("//*[@resource-id='android:id/button1']").click()
            except:
                print("点击应用宝权限后未识别")
            # if d(textContains="检查是否有更新").exists(timeout=30):
            #     d.xpath("//*[@resource-id='android:id/button1']").click()
            if d(textContains="欢迎使用应用宝").exists(timeout=30):
                d.xpath('//*[@resource-id="com.tencent.android.qqdownloader:id/ri"]').click()

            if d(textContains="发送通知吗").exists(timeout=30):
                d.xpath('//*[@resource-id="com.android.permissioncontroller:id/permission_allow_button"]').click()

            if d(textContains='一键下载').exists(timeout=30):
                d.press("back")

            if d(textContains="秒完游戏").exists(timeout=20):
                d.press("back")
        except:
            logger.info("function:" + sys._getframe().f_code.co_name + ":start_yingyongbao:")

    def login_yingyongbao(self):
        try:
            d(resourceId="com.tencent.android.qqdownloader:id/e6", text="我的").click()
            if d(text="欢迎登录应用宝").exists(timeout=6):
                d.xpath('//*[@resource-id="com.tencent.android.qqdownloader:id/uy"]').click()

            d.xpath('//*[@resource-id="com.tencent.android.qqdownloader:id/ac1"]').click()
            d(text="下载完成后提示安装").right().click()
            d.press("back")
            d(text="下载完成后提示安装").wait_gone()
        except:
            logger.info("function:" + sys._getframe().f_code.co_name + ":login_yingyongbao:")

    def down_app(self):
        #assert_succes=["下载量","评价"]
        try:

            for i in range(0, len(self.package_list)):
                d.shell(f"am start -a android.intent.action.VIEW -d market://details?id={self.package_list[i]} -p com.tencent.android.qqdownloader")
                #有多个下载apk路径就需要使用如下代码
                #d.app_wait(self.package_list[i], 60, front=True)
                # try:
                #     #首次启动应用宝会选择打开的方法 如果有多个下载途径
                #     assert d(text="应用宝").exists(2)
                #     d.xpath("//*[@text='应用宝']").click()
                #     #d.xpath("//*[@text='仅此一次']").click()
                #     # d.xpath("//*[@text='始终']").click()
                #     d.sleep(2)
                #     d.click(width*0.75, height*0.95)  #540 1520
                # except:
                #     pass
                #
                try:
                    d(text="下载量").exists(10)
                    d(text="评价").exists(10)
                    # device.xpath('//*[@text="下载"]').click()
                    assert "下载量" in d(text="下载量").get_text() and "评价" in d(text="评价").get_text()
                    # install_num = d(text="下载量").wait(20).exit()
                    d.click(0.15 * self.width, 0.95 * self.height)
                    d.sleep(3)
                    print(f"{self.package_list[i].strip()}已加入到下载名单")

                except:
                    assert "找不到数据" in d(resourceId="com.tencent.android.qqdownloader:id/v5").get_text()
                    print(f"网络问题导致{self.package_list[i]}下载失败,检查网络")
                    self.package_list_sceen=self.package_list[i].strip()
                    d.screenshot(f'{self.package_list_sceen}.png')
                    # try:
                    #     d(textContains="找不到数据了").exists()
                    #     d(text="重新加载").click()
                    # except:
                    #     print("你的网络断了,检查网络")
                    #     d.screenshot("网络问题.png")
                    continue
        except:
            logger.info("function:" + sys._getframe().f_code.co_name + ":yinngyongbao_install:")
        # d(textContains="运营者").click()
        # element_install_num = d(text="下载量").get_text()
        # element_evaluate = d(text="评价").get_text()
        # assert element_install_num=="下载量" and element_evaluate=="评价"
        # #print(element_install_num,element_evaluate)
        # d.click(width,height)
    #断言//*[@text="下载量"] 和 //*[@text="评价"]
    """安装模块已写好"""
    def yingyongbao_install_Permissions(self):
        d.app_start("com.tencent.android.qqdownloader", wait=True)
        d.xpath('//*[@text="我的"]').click_exists(timeout=30)

        #d(resourceId="com.tencent.android.qqdownloader:id/e6",text="我的").click_exists(20)

        if d(text="欢迎登录应用宝").exists(timeout=6):
            d.xpath('//*[@resource-id="com.tencent.android.qqdownloader:id/uy"]').click()

        try:
            d.xpath("//*[@text='下载安装']").wait(20).click()
            try:
                d.xpath("//*[@text='一键安装']").wait(20).click()
            except Exception as result:
                print(f"{result}\n没有一键安装按钮,检查是否已经下载了安装包")
        except:
            logger.info("function:" + sys._getframe().f_code.co_name + ":yingyongbao_install_Permissions:")
        try:
            assert "未知应用" in d(resourceId="android:id/message").get_text()
            d(resourceId="android:id/button1", text="设置").click()
            d.xpath('//*[@text="允许来自此来源的应用"]').click()
            d(text="取消").click()

            # d(text="安装").click()
            # d(text="完成").click_exists(timeout=180)
            d.press("back")
            d(text="安装未知应用").wait_gone(timeout=5)
        except:
            logger.info("function:" + sys._getframe().f_code.co_name + ":yingyongbao_install_Permissions:")

# try:
#     d(resourceId="com.tencent.android.qqdownloader:id/gz", text="一键安装").click()
# except Exception as result:
#     print(f"{result}\n没有一键安装按钮,检查是否已经下载了安装包")
    def yingyongbao_install(self):
        app_all=[]
        while True:
            try:
                #d.xpath('//*[@resource-id="com.android.packageinstaller:id/install_confirm_question"]').get_text()=="要安装此应用吗?"
                #assert "安装" in d(text="要安装此应用吗?").get_text()
                assert "安装" in d(textContains="此应用").get_text()
                # 检查并点击“要安装此应用吗?”
                if d(text="要安装此应用吗?").exists(timeout=10):
                    app_name=d.xpath("//*[@resource-id='android:id/alertTitle']").get_text()
                    print(f"安装的应用昵称是{app_name}")
                    app_all.append(app_name)
                    d(text="安装").click()
                #print(f"正在安装的应用是{self.package_list[i]}")

                    # 等待“正在安装…”出现(注意:这里不调用exists,只是等待)
                d(text="正在安装…").wait(timeout=10)

                # 检查并点击“完成”(如果它存在)
                if d(text="完成").exists(timeout=120):
                    d(text="完成").click()
                #print(f"安装的应用是{self.package_list[i]}")

            except:
                print(f"总共安装了len{app_all}个应用,分别是{app_all}")
                break

# """守护线程要安装的应用"""
# def wait_insatall(self):
#         """会提示安装未知应用"""
#         try:
#             assert "未知应用" in d(resourceId="android:id/message").get_text()
#             d(resourceId="android:id/button1",text="设置").click()
#             d(resourceId="android:id/title", text="允许来自此来源的应用").click()
#         except:
#             pass
#         #d(text="Settings").wait_gone(timeout=1.0) 等待消失
#         d(text="安装").wait(5)
#         d(text="安装",className="android.widget.Button").click()
#         if d(text="已屏蔽不安全的应用").exists(timeout=5):
#             # d(text="知道了").click()
#             d.xpath('//*[@text="更多详情"]').click()
#             d.xpath('//android.widget.ScrollView/android.view.View[3]')  # 需要点击仍要安装
#         d(text="正在安装…").wait(2).exists(timeout=3)
#         d(text="已安装应用。").exists(timeout=5)
#     #会弹出不安全的应用
#         a_thead=Thread(target=self.wait_insatall,args=())
#         b_thead=Thread(target=self.yinngyongbao_install,args=())
#         a_thead.setDaemon(True)
#         a_thead.start()
#         b_thead.start()
    @staticmethod
    def show_menu():
        print("========================================================== ")
        print("||    <1>应用宝下载        <2>应用宝安装       <3>    ||\n")
        print("========================================================== ")

if __name__ == '__main__':


    anzhuang=yingyongbao()
    """应用宝下载功能"""
    while True:
        anzhuang.show_menu()
        num = int(input("输入你要选择的功能,用数字替代:先下载后执行安装:"))

        if num == 1:
            anzhuang.start_yingyongbao()
            anzhuang.login_yingyongbao()
            anzhuang.down_app()
            print("=======================下载执行完毕=========================== ")
        elif num == 2:
            """应用宝安装功能"""
            anzhuang.yingyongbao_install_Permissions()
            anzhuang.yingyongbao_install()
        else:
            print("输入有误,重新输入")
首先,在将Uniapp应用上架到应用之前,我们需要确保应用已经完成了必要的开发和测试工作,并且准备好所需要的应用信息和素材。 第一步是注册和认证开发者账号。登录到应用的开放平台(https://open.qq.com/),点击注册并按照相应的流程进行填写和提供所需的身份证件和资料信息完成开发者认证。 第二步是创建应用。在开放平台的控制台页面,选择创建应用,并填写应用的相关信息,包括应用名称、应用图标、应用介绍等。在这一步中,我们还需要上传应用的安装包文件。 第三步是填写应用详情。在创建应用完成后,我们需要进入应用详情页面,填写应用的详细信息,包括应用分类、应用简介、应用截图等。此外,还需要填写应用的版本号、适用的手机型号等信息。 第四步是选择发布方式。根据应用的情况,我们可以选择是以“应用内”还是“外部链接”方式进行发布。如果选择“应用内”,则需要进一步填写应用的更新日志和版本介绍等。 第五步是提交审核。在填写完应用信息后,我们需要点击提交审核按钮,应用会对应用进行审核,审核周期一般为1-3个工作日。 最后,一旦应用通过审核,我们就可以在应用上找到并下载我们的Uniapp应用了。同时,我们还可以在开放平台的控制台中管理和更新我们的应用。 需要注意的是,上架应用并通过审核只是第一步,之后我们还需要关注应用的推广和用户反馈,不断优化我们的应用以提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值