首页 > 编程语言 >利用Python操作Android手机刷抖音

利用Python操作Android手机刷抖音

时间:2022-10-22 13:04:07浏览次数:85  
标签:__ 221022 uiautomator Python 刷抖音 09 init Android uiautomator2

前言:

       很多时候,想要学习一个陌生领域的知识时,需要先定一个或基础或高阶的目的,这个目标最好带有趣味性,然后锚定这个目标;或许最终目标很轻松就被实现了,也或许最终发现目标实在太高难以实现;这些都没有关系,一步步探索,一步步走进目标的过程并在这个过程中得到提升才是学习的真正意义所在。

       在一步步试探的过程中,我们会思考、搜索资料、质疑是否有更好的实现方式;这一路的过程可以概括为:

——了解它

——走近它

——观察它/测试它

——改造它/思考测试

——创造另一个它

      只要自己不停止研究,目标只会越来越近;正所谓:日拱一卒,功不唐捐是也。

一、下载安装python

https://www.python.org/downloads/windows/

根据自己的OS版本选择安装

二、安装uiautomator2包

安装​​uiautomator2​

pip install uiautomator2 -i https://pypi.douban.com/simple/

或者(建议在virtualenv下操作)

pip install --pre -U uiautomator2

需要较长时间!!!!

三、安装ADB工具

ADB下载路径:

Windows版本:​​https://dl.google.com/android/repository/platform-tools-latest-windows.zip​

Mac版本:​​https://dl.google.com/android/repository/platform-tools-latest-darwin.zip​​​

Linux版本:​​​https://dl.google.com/android/repository/platform-tools-latest-linux.zip​

将文件下载下来,解压缩到自定义的安装目录即可。

也可以直接安装Android SDK;在Android SDK安装目录下的platform-tools文件夹中可以找到adb.exe程序。

四、对移动设备执行初始化

首先确保

1.手机设备成功接通到电脑(USB或WIFI);

2.手机开启了调试模式;

以下几项权限比较重要:

——开启开发者模式(必要)

——USB调试(必要)

——USB安装(必要)

——USB模拟点击(必要)

——指针位置(建议开启,非强制)

没开启前,我们再电脑上使用adb devices看到的结果是这样的:

利用Python操作Android手机刷抖音_抖音

3.电脑上安装adb工具(包含在Android SDK中,也可以单独安装);建议架构adb工具为位置加入环境变量PATH

注意:下图的显示是根据你手机启用的调试模式显示的

USB调试是这样:

利用Python操作Android手机刷抖音_android_02

对移动设备初始化

这个是最重要的操作。

这个过程会在移动设备上,安装一个agent(需要手机调试模式中允许调试安装app)

python -m uiautomator2 init

如果提示(这个很重要,事个常见报错)

ModuleNotFoundError: No module named 'dataclasses'

就安装这个库

pip install dataclasses

再次运行就可以看到安装成功了:(有些手机需要插入SIM卡才可以开启调试模式下安装软件的功能;根据要求满足开启条件就行。)

(myenv) PS D:\xiamingliang\project001> python -m uiautomator2 init
[I 221022 09:30:55 init:156] uiautomator2 version: 2.16.19
[I 221022 09:30:55 init:373] Install minicap, minitouch
[D 221022 09:30:55 init:59] Use cached assets: C:\Users\Administrator.DESKTOP-QBI8U5R\.uiautomator2\cache\minitouch-f7a806902f\minitouch
[D 221022 09:30:55 init:238] Push to /data/local/tmp/minitouch:0755
[I 221022 09:30:55 init:379] Android R (sdk:30) has no minicap resource
[D 221022 09:30:56 init:256] apk-debug package-info: None
[D 221022 09:30:56 init:257] apk-debug-test package-info: None
[I 221022 09:30:56 init:388] Install com.github.uiautomator, com.github.uiautomator.test 2.3.3
[D 221022 09:30:56 init:167] Shell: ('pm', 'uninstall', 'com.github.uiautomator')
[D 221022 09:30:56 init:167] Shell: ('pm', 'uninstall', 'com.github.uiautomator.test')
[D 221022 09:30:56 init:59] Use cached assets: C:\Users\Administrator.DESKTOP-QBI8U5R\.uiautomator2\cache\app-uiautomator.apk-d3f17174fb\app-uiautomator.apk
[D 221022 09:30:56 init:238] Push to /data/local/tmp/app-uiautomator.apk:0644
[D 221022 09:30:57 init:167] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator.apk')
[I 221022 09:31:16 init:331] - app-uiautomator.apk installed
[D 221022 09:31:16 init:59] Use cached assets: C:\Users\Administrator.DESKTOP-QBI8U5R\.uiautomator2\cache\app-uiautomator-test.apk-652bf9e13c\app-uiautomator-test.apk
[D 221022 09:31:16 init:238] Push to /data/local/tmp/app-uiautomator-test.apk:0644
[D 221022 09:31:16 init:167] Shell: ('pm', 'install', '-r', '-t', '/data/local/tmp/app-uiautomator-test.apk')
[I 221022 09:31:23 init:331] - app-uiautomator-test.apk installed
[D 221022 09:31:23 init:167] Shell: ('/data/local/tmp/atx-agent', 'server', '--stop')
[I 221022 09:31:23 init:346] Install atx-agent 0.10.0
[D 221022 09:31:23 init:59] Use cached assets: C:\Users\Administrator.DESKTOP-QBI8U5R\.uiautomator2\cache\atx-agent_0.10.0_linux_armv7.tar.gz-cf3333ae7b\atx-agent_0.10.0_linux_armv7.tar.gz
[D 221022 09:31:23 init:238] Push to /data/local/tmp/atx-agent:0755
[D 221022 09:31:24 init:167] Shell: ('/data/local/tmp/atx-agent', 'server', '--nouia', '-d', '--addr', '127.0.0.1:7912')
[I 221022 09:31:24 init:350] Check atx-agent version
[D 221022 09:31:24 init:359] Forward: local:tcp:15957 -> remote:tcp:7912
[D 221022 09:31:25 init:359] Forward: local:tcp:15957 -> remote:tcp:7912
[D 221022 09:31:25 init:362] atx-agent version 0.10.0
[D 221022 09:31:25 init:366] device wlan ip: 192.168.88.105
Successfully init AdbDevice(serial=c******0)
(myenv) PS D:\xiamingliang\project001>


利用Python操作Android手机刷抖音_视频_03

并且,在你的手机上,也会有一个ATX

利用Python操作Android手机刷抖音_视频_04


利用Python操作Android手机刷抖音_android_05


所以刚才我们输入的​​uiautomator init​​ 命令会执行哪些操作呢 ?

他会安装3个包,

  • uiautomator-server:谷歌原生的uiautomator
  • atx-agent:uiautomator的守护进程
  • atx-agent增加远程控制的功能,依赖minicap和minitouch这两个工具

初始化完成后,既可以在这个目录下​​C:\Users\Administrator\.uiautomator2\cache​​看到这几个包了:(这个不重要,看不到也没啥影响的)

五、连接手机

1.通过USB方式

>>> import uiautomator2
>>> conn = uiautomator2.connect_usb('c******0') #adb devices显示的设备id
>>> print(conn.info)
[D 221022 09:42:32 __init__:656] [pid:10108] [c******0] kill process(ps): uiautomator
[D 221022 09:42:33 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 40.0s
[D 221022 09:42:34 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 39.0s
[D 221022 09:42:35 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 37.9s
[D 221022 09:42:36 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 36.9s
[D 221022 09:42:37 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 35.9s
[D 221022 09:42:38 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 34.9s
[D 221022 09:42:39 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 33.8s
[D 221022 09:42:40 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 32.8s
[D 221022 09:42:41 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 31.8s
[D 221022 09:42:42 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 30.8s
[D 221022 09:42:42 __init__:691] [pid:10108] [c******0] show float window
[D 221022 09:42:43 __init__:678] [pid:10108] [c******0] uiautomator-v2 is starting ... left: 29.6s
[I 221022 09:42:43 __init__:638] [pid:10108] [c******0] uiautomator back to normal
{'currentPackageName': 'com.miui.home', 'displayHeight': 2276, 'displayRotation': 0, 'displaySizeDpX': 393, 'displaySizeDpY': 873, 'displayWidth': 1080, 'productName': 'munch', 'screenOn': True, 'sdkInt': 31, 'naturalOrientation': True}
>>>

可以看到设备的信息可以这个正常获取并显示。

2.通过WIFI方式

>>> import uiautomator2
>>> conn = uiautomator2.connect_adb_wifi('your phone ip address')
>>> print(conn.info)

3.uiautomator2其他常用的function

function:
_fix_wifi_addr:
_is_tmq_production:
connect: Args:
connect_adb_wifi: Run adb connect, and then call connect_usb(..)
connect_usb: Args:
connect_wifi: Args:
deprecated: This is a decorator which can be used to mark functions
list2cmdline:
namedtuple: Returns a new subclass of tuple with named fields.
process_safe_wrapper: threadsafe for process calls
retry: Returns a retry decorator.
setup_logger: Configures and returns a fully configured logger instance, no hassles.
thread_safe_wrapper:

六:用python做个调试程序

import uiautomator2
import time
import random
def douyin():
#通过usb连接;c******0是adb devices -l列出的被调试手机id(手机上要点击允许)
cnotallow=uiautomator2.connect_usb('c******0') #替换成自己的
# 打开抖音
conn(text="抖音").click() #没打开时使用,打开程序后就不需要了
runcount_init = 0
runcount_all = 10 #划几次
while runcount_init < runcount_all:
# 滑动视频
# 向下滑
conn.swipe(round(random.uniform(700,720),2),round(random.uniform(1650,1670),2),round(random.uniform(830,850),2),round(random.uniform(300,320),2),duratinotallow=random.uniform(0.01,0.1)) #调整duration控制滑动速度
time.sleep(random.uniform(0.5,1.5))
# 向上滑
conn.swipe(round(random.uniform(810,800),2),round(random.uniform(1160,1200),2),round(random.uniform(775,785),2),round(random.uniform(1750,1800),2),duratinotallow=random.uniform(0.01,0.1))
time.sleep(random.uniform(0.5,1.5))
runcount_init = runcount_init + 1

if __name__=='__main__':
douyin()

七:补充信息

几种常用的定位APP方式如下:

1.text:a(text=“抖音”).click()   #需要程序在屏幕最上层(如果APP在抽屉或者不在当前页面则无法定位并打开的)
2.resourceid:a(resourceId=“com.smartisanos.clock:id/text_stopwatch”).click()
3.classname:a(className=“android.widget.TextView”).click()
4.description :a(descriptinotallow="…").click()

更多的方法参考:

名称

描述

text

text是指定文本的元素

textContains

text中包含有指定文本的元素

textMatches

text符合指定正则的元素

textStartsWith

text以指定文本开头的元素

className

className是指定类名的元素

classNameMatches

className类名符合指定正则的元素

description

description是指定文本的元素

descriptionContains

description中包含有指定文本的元素

descriptionMatches

description符合指定正则的元素

descriptionStartsWith

description以指定文本开头的元素

checkable

可检查的元素,参数为True,False

checked

已选中的元素,通常用于复选框,参数为True,False

clickable

可点击的元素,参数为True,False

longClickable

可长按的元素,参数为True,False

scrollable

可滚动的元素,参数为True,False

enabled

已激活的元素,参数为True,False

focusable

可聚焦的元素,参数为True,False

focused

获得了焦点的元素,参数为True,False

selected

当前选中的元素,参数为True,False

packageName

packageName为指定包名的元素

packageNameMatches

packageName为符合正则的元素

resourceId

resourceId为指定内容的元素

resourceIdMatches

resourceId为符合指定正则的元素

对于元素的定位还支持:

1.子元素定位

2.兄弟定位

3.相对定位

4.XPATH定位等


八、视频效果

​点击这里​​查看视频效果。​

视频链接地址:

​https://xml-test01.oss-cn-shanghai.aliyuncs.com/%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2%E8%B5%84%E6%96%99/20221022_110858.mp4​



本文作者:夏明亮

转载请标注出处:​​https://blog.51cto.com/mlxia​



标签:__,221022,uiautomator,Python,刷抖音,09,init,Android,uiautomator2
From: https://blog.51cto.com/mlxia/5785794

相关文章

  • Python: Flyweight Pattern
    DuFlyweight.py#享元模式FlyweightPatterngeovindu,GeovinDu,涂聚文importtimeclassArrow:def__init__(self,x,y,z,velocity):self.x=x......
  • Python爬取猫眼电影榜单电影数据以及遇到问题总结
    代码importcsvimportrandomimportreimporttimefromurllibimportrequestfromfake_useragentimportUserAgent#定义一个爬虫类classMaoyanSpider(obje......
  • python打印菱形
    #_*_encoding:utf-8_*_@author:tyhery2018/9/6defprintStar(intNum):s="*"spaceLength=intNumblockCount=int(intNum/2+1)......
  • Python Easyocr 图片文字识别
    前段时间做了车牌识别相关的内容分享,参看:​​车牌识别(1)-车牌数据集生成​​​​车牌识别(2)-搭建车牌识别模型​​今天给大家分享一个简单的OCR文本识别工具:easyocr。这个模块......
  • Python Easyocr 图片文字识别
    前段时间做了车牌识别相关的内容分享,参看:​​车牌识别(1)-车牌数据集生成​​​​车牌识别(2)-搭建车牌识别模型​​今天给大家分享一个简单的OCR文本识别工具:easyocr。这个模块......
  • Android Fragment实现一个底部导航栏切换页面
    用户界面UserActivity中包含两个Fragment,分别用来显示不同的应用功能,就像QQ中“聊天栏”“联系人”“动态”这三个底部导航栏之间的切换一样。效果图:  在UserActivi......
  • 建议收藏| 学python的看过来,Python 史上最全第三方库收集
    发现一个宝藏网站:GitHub上有一个Awesome-XXX系列的资源整理,这个系列以“全”闻名,但凡是有一定知识度的领域、语言、框架等,都有自己的awesome-xxx系列的项目。今天......
  • 快学起来!python入门自学必看
    记得刚开始学python的时候,各种买书各种找资料,最后发现资料找了一大堆,但都是东一块西一块,内容不全且不系统,无意间发现这个宝藏网站,真的是太全了,当作工具书,时不时的翻翻,总会......
  • android开发:弹框(AlertDialog)和提示信息Toast字体大小颜色设置
    一、AlertDialog: AlertDialog.Builderbuilder=newAlertDialog.Builder(getActivity());builder.setTitle("温馨提示");builder.setMessage("是否进行下一个病人......
  • #yyds干货盘点# 盘点一个Python安装库的时候遇到的一个小问题
    大家好,我是皮皮。一、前言前几天在Python铂金交流群【Crazy】问了一个​​Python​​基础的问题,提问截图如下:报错的截图如下:二、实现过程看上去确实没啥问题,因为库都已经存......