当前位置: 首页 > news >正文

应用宝自动下载安装

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.0def 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_pathdef 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")continueexcept: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()@staticmethoddef 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("输入有误,重新输入")

相关文章:

应用宝自动下载安装

import uiautomator2 as u2 from threading import Thread import logging import sys import os loggerlogging.getLogger("uiautomator2") logger.setLevel(logging.INFO) d u2.connect()"""下载模块""" class yingyongbao(object…...

Vue 2 中实现双击事件的几种方法

在 Vue 2 中处理用户交互&#xff0c;特别是双击事件&#xff0c;是一个常见的需求。Vue 提供了一种简洁的方式来绑定事件&#xff0c;包括双击事件。本文将介绍几种在 Vue 2 中实现双击事件的方法。 1. 使用 dblclick 指令 Vue 允许你直接在模板中使用 dblclick 指令来监听双…...

windows服务管理插件 nssm

NSSM是一个windows下服务管理插件&#xff0c;可以填加、删除、启动、停止服务 1.下载 官网&#xff1a;http://nssm.cc 下载页面&#xff1a;http://nssm.cc/download 直接下载&#xff1a;http://nssm.cc/release/nssm-2.24.zip 2.食用 以填加php8.2为例 2.1.将nssm.ex…...

【读书笔记-《30天自制操作系统》-19】Day20

本篇的内容围绕系统调用展开。为了让应用程序能够调用操作系统功能&#xff0c;引入了系统调用以及API的概念。首先实现了显示单个字符的API&#xff0c;让应用程序通过传递地址的方式进行调用&#xff1b;接下来又改进为通过中断的方式进行调用。在此基础上继续实现了显示字符…...

Kubernetes服务注册与发现

Kubernetes服务注册与发现 1、服务注册2、服务发现2.1 DNS服务发现2.2 环境变量(较少使用)💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes中,服务注册与发现确保了Pod间的高效通信。 1、服务注册 当创建Service时,其信息被存储在Kubernetes的ETCD数据库中。Pod…...

【 html+css 绚丽Loading 】000047 玄武流转盘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…...

线程池原理及改造

目录 一 线程池执行原理 二 线程池改造(一) 三 线程池改造(二) 一 线程池执行原理 首先我们先了解一下线程池里面几个参数&#xff1a; 第一个是核心线程数&#xff0c;第二个是线程池最大线程数。&#xff08;线程池里面的线程分为核心线程和非核心线程&#xff0c;既然核心…...

彻底理解mysql Buffer Pool (拓展)

彻底理解Buffer Pool &#xff08;拓展&#xff09; 一、Buffer Pool 的内存管理策略对数据库性能的影响 内存分配与回收&#xff1a;Buffer Pool 在申请内存时&#xff0c;需要考虑操作系统的内存分配策略。如果分配不合理&#xff0c;可能导致内存碎片&#xff0c;影响性能…...

信号量(二值信号量和计数信号量)和互斥量

信号量 信号量&#xff08;Semaphore&#xff09; 是一种实现任务间通信的机制&#xff0c; 可以实现任务之间同步或临界资源的互斥访问&#xff0c; 常用于协助一组相互竞争的任务来访问临界资源。 在多任务系统中&#xff0c; 各任务之间需要同步或互斥实现临界资源的保护&a…...

结构型模式-python版

在21种设计模式中&#xff0c; 结构型设计模式有7种&#xff0c; 分别是&#xff1a; 适配器模式代理模式桥接模式享元模式外观模式组合模式装饰器模式 下面逐一简要介绍&#xff1a; 1 适配器模式 适配器&#xff08;Adapter&#xff09;设计模式是一种结构型设计模式&…...

Java重修笔记 第五十四天 坦克大战(二)常用的绘图方法、画出坦克图形

常用的绘图方法 1.设置当前画笔的颜色&#xff0c;可多次调用 public abstract void setColor(Color c) 参数&#xff1a;c -颜色 2. 画一条直线 public abstract void drawLine(int x1, int y1, int x2, int y2) 参数&#xff1a;x1 - 第一个点的 x坐标。 y1 - 第一点的 y坐…...

OpenAI澄清:“GPT Next”不是新模型。

不&#xff0c;”GPT Next” 并不是OpenAI的下一个重要项目。 本周早些时候&#xff0c;OpenAI 日本业务的负责人长崎忠男在日本 KDDI 峰会上分享了一场演讲&#xff0c;似乎在暗示一个名为 “GPT Next” 的新模型即将出现。 但OpenAI的一位发言人已向Mashable证实&#xff0…...

<<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路

串联电路 info::操作说明 鼠标单击开关切换开合状态 需要两个开关同时闭合才能接通电路 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch10-01-series-circuit.txt 并联电路 in…...

深入浅出 Ansible 自动化运维:从入门到实战

在现代 IT 运维中&#xff0c;自动化是提升效率、降低错误率的关键。Ansible 作为一款流行的自动化工具&#xff0c;凭借其简洁的语法和强大的功能&#xff0c;成为了运维工程师的得力助手。本文将深入探讨 Ansible 的核心概念、实际应用以及一些实用的技巧&#xff0c;帮助你在…...

一句话描述设计模式

最近在看设计模式&#xff0c;其描述抽象程度令人欲罢不能&#xff0c;始终不得其意。于是尝试用一句话总结了一下&#xff0c;常规的就不说了&#xff0c;只是举了个例子。 单例模式 Spring中的单例bean使用了双重锁机制 工厂模式 Spring中的BeanFactory是简单工厂模式Bea…...

【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装

参考 https://blog.csdn.net/qq_35995514/article/details/134350572?spm1001.2014.3001.5501 在原作者基础上做了修改&#xff0c;加了一个删除原有mysql 的脚本 文章目录 一、安装下载**my.cnf 配置文件** 二、执行安装**install_mysql.sh 安装脚本**本机免密脚本 ssh_keyge…...

SQL Server开启网络访问

目前工作中很少用到SQL Server了&#xff0c;最近需要测试几个表&#xff0c;需要搭建一个SQL Server数据库服务&#xff0c;这里做个总结吧。 安装这里就不做详细介绍了&#xff0c;本文只介绍如何开启SQL Server网络访问。 1、云服务器安全组设置 如果是搭建在云服务器上&a…...

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据&#xff0c;我们首先会想到typenumber&#xff0c;设置完type为number时会限制我们输入的内容只能为数字&#xff0c;不能为字符/汉字等非数字类型的数值&…...

6.第二阶段x86游戏实战2-理解程序流程

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么&#xff1f;1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理&#x1f4a1; 提示 1. 概述 1.1 …...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...