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

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境

安装appium-python-client模块

在window的虚拟环境下执行pip install appium-python-client

启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb server和模拟器的连接
  1. adb devices
C:\Program Files (x86)\Nox\bin>adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
  1. nox_adb.exe connect 127.0.0.1:62001
C:\Program Files (x86)\Nox\bin>nox_adb.exe connect 127.0.0.1:62001
already connected to 127.0.0.1:62001
  1. adb devices
C:\Program Files (x86)\Nox\bin>adb devices
List of devices attached
127.0.0.1:62001 device
启动appium-desktop,点击start server启动appium服务
[Appium] Welcome to Appium v1.10.0
[Appium] Appium REST http interface listener started on 0.0.0.0:4723
利用上一小节所学习的内容获取Desired Capabilities参数
  1. 获取模拟设备的型号
    • 打开设置——关于平板电脑
    • 查看型号,获取模拟设备的型号
  2. 获取app包名称 以及 app进程名
    • 打开模拟器中的抖音短视频app
    • 在adb连接正确的情况下,在夜神模拟器安装目录的bin目录下的cmd中输入adb shell
    • 进入adb shell后输入 dumpsys activity | grep mFocusedActivity
    • ``com.ss.android.ugc.aweme`就是app包名
    • .main.MainActivity就是进程名 注意前边有个点.

初始化以及获取移动设备分辨率

完成代码如下,并运行代码查看效果:如果模拟器中抖音app被启动,并打印出模拟设备的分辨率则成功

from appium import webdriver# 初始化配置,设置Desired Capabilities参数
desired_caps = {'platformName': 'Android','deviceName': 'SM-G955F','appPackage': 'com.ss.android.ugc.aweme','appActivity': '.main.MainActivity'
}
# 指定Appium Server
server = 'http://localhost:4723/wd/hub'
# 新建一个driver
driver = webdriver.Remote(server, desired_caps)
# 获取模拟器/手机的分辨率(px)
width = driver.get_window_size()['width']
height = driver.get_window_size()['height']
print(width, height)
  • 移动设备分辨率

    • driver.get_window_size()[‘width’]

    • driver.get_window_size()[‘height’]

定位元素以及提取文本的方法

点击appium desktop右上角的放大镜图标

如图填写配置,并点击start session

在这里插入图片描述

定位界面的使用方法如下图所示

在这里插入图片描述

点击短视频的作者名字,查看并获取该元素的id

在这里插入图片描述

在python使用代码通过元素id获取该元素的文本内容

实例化appium driver对象后添加如下代码,运行并查看效果

# 获取视频的各种信息:使用appium desktop定位元素
print(driver.find_element_by_id('bc').text)  # 发布者名字
print(driver.find_element_by_id('al9').text)  # 点赞数
print(driver.find_element_by_id('al_').text)  # 留言数
print(driver.find_element_by_id('a23').text)  # 视频名字,可能不存在,报错
  • 定位元素及获取其文本内容的方法

    • driver.find_element_by_id(元素的id).text
    • driver.find_element_by_xpath(定位元素的xpath规则).text

控制抖音app滑动

appium滑动的函数

从(start_x, start_y)滑动到(end_x, end_y)

  • driver.swipe(start_x, start_y, end_x, end_y)
控制抖音app滑动的代码实现
start_x = width // 2  # 滑动的起始点的x坐标,屏幕宽度中心点
start_y = height // 3 * 2  # 滑动的起始点的y坐标,屏幕高度从上开始到下三分之二处
distance = height // 2  # y轴滑动距离:屏幕高度一半的距离
end_x = start_x # 滑动的终点的x坐标
end_y = start_y-distance # 滑动的终点的y坐标
# 滑动
driver.swipe(start_x, start_y, end_x, end_y)

整理并完成自动滑动的代码

import time
from appium import webdriverclass DouyinAction():"""自动滑动,并获取抖音短视频发布者的id"""def __init__(self, nums:int=None):# 初始化配置,设置Desired Capabilities参数self.desired_caps = {'platformName': 'Android','deviceName': 'SM-G955F','appPackage': 'com.ss.android.ugc.aweme','appActivity': '.main.MainActivity'}# 指定Appium Serverself.server = 'http://localhost:4723/wd/hub'# 新建一个driverself.driver = webdriver.Remote(self.server, self.desired_caps)# 获取模拟器/手机的分辨率(px)width = self.driver.get_window_size()['width']height = self.driver.get_window_size()['height']print(width, height)# 设置滑动初始坐标和滑动距离self.start_x = width//2 # 屏幕宽度中心点self.start_y = height//3*2 # 屏幕高度从上开始到下三分之二处self.distance = height//2 # 滑动距离:屏幕高度一半的距离# 设置滑动次数self.nums = numsdef comments(self):# app开启之后点击一次屏幕,确保页面的展示time.sleep(2)self.driver.tap([(500, 1200)], 500)def scroll(self):# 无限滑动i = 0while True:# 模拟滑动print('滑动ing...')self.driver.swipe(self.start_x, self.start_y,self.start_x, self.start_y-self.distance)time.sleep(1)self.get_infos() # 获取视频发布者的名字# 设置延时等待time.sleep(4)# 判断是否退出if self.nums is not None and self.nums == i:breaki += 1def get_infos(self):# 获取视频的各种信息:使用appium desktop定位元素print(self.driver.find_element_by_id('bc').text) # 发布者名字print(self.driver.find_element_by_id('al9').text) # 点赞数print(self.driver.find_element_by_id('al_').text) # 留言数print(self.driver.find_element_by_id('a23').text) # 视频名字,可能不存在,报错# # 点击【分享】坐标位置 671,1058# self.driver.tap([(671, 1058)])# time.sleep(2)# # 向左滑动露出 【复制链接】 580,1100 --> 200, 1100# self.driver.swipe(580,1100, 20, 200, 1100)# # self.driver.get_screenshot_as_file('./a.png') # 截图# # 点击【复制链接】 距离右边60 距离底边170 720-60,1280-170# self.driver.tap([(660, 1110)])# # self.driver.get_screenshot_as_file('./b.png')  # 截图def main(self):self.comments() # 点击一次屏幕,确保页面的展示time.sleep(2)self.scroll() # 滑动if __name__ == '__main__':action = DouyinAction(nums=5)action.main()

至此,可以参考爬虫5.0课程项目库,使用fiddler等抓包工具,利用appium+mitmproxy+wget等python模块自动获取抖音视频文件

相关文章:

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb…...

day22_236二叉树最近公共祖先_235二叉搜索树(最近公共祖先_701插入一个节点_450删除一个节点)

文章目录 [236 二叉树的最近公共祖先](https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE)[235 二叉搜索树的最近公共祖先](https://program…...

OpenSource - 工具管理器easy-manager-tool

文章目录 功能说明运行配置环境配置启动docker部署 项目安全UI展示 Easy-Manager-Tool 打造软件行业首款集成工具,不管你是程序员,测试,运维等都可以使用该软件来提升自己的工作效率。 Easy-Manager-Tool 的诞生是为了解决软件行业众多参与者…...

Laravel7 + easyWeChat 实现微信公众号支付功能

注册服务号,需进行微信认证,此时需缴费 300 元/年,必须是认证成功的服务号才能开通微信支付。 注册微信支付商户号 1、登录 https://pay.weixin.qq.com/index.php/core/home/login?return_urlhttps%3A%2F%2Fpay.weixin.qq.com%2Findex.php%…...

Linux环境下,针对QT软件工程搭建C++Test单元测试环境的操作指南

文章目录 前言一、安装QT二、安装CTest三、使用QT生成.bdf文件四、创建CTest工程注意事项 前言 CTest是Parasoft公司出品的一款可以针对C/C源代码进行静态分析、单元测试、集成测试的测试工具。本文主要讲解如何在Linux环境下,搭建QT插件版的CTest测试环境。 一、…...

16k+ start 一个开源的的监控系统部署教程

安装条件 Linux或macOS系统 4GB内存 开放 33014、33174、3183端口 1.安装 1、下载源码 首先使用 git 克隆源码到本地 git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/ 方式1:运行 install.sh 脚本一键安装 ./install.s…...

Mermaid使用教程(绘制各种图)

Mermaid使用教程(绘制各种图) 文章目录 Mermaid使用教程(绘制各种图)简介饼状图简单的例子应用案例 序列图简单案例应用案例另一个应用案例 甘特图简单案例应用案例一个更为复杂的应用案例 Git图简单案例 总结 简介 本文将主要介…...

OpenAI/ChatGPT Plus 支持的虚拟卡有哪些

最近,有关 OpenAI/ChatGPT Plus 需要信用卡的讨论越来越多。在这篇文章中,我将分享一些我在绑定信用卡过程中得到的经验和教训,以及 OpenAI/ChatGPT Plus 支持的卡类型。 不支持的卡 根据 OpenAI 的地区限制,国内和香港的卡都不…...

ARM多核调度器DSU

1. 背景 从A75开始,ARM提出了一个新的多核心管理系统单元,叫做DSU(DynamIQ Shared Unit)。DSU的核心功能是控制CPU内核,使其成簇Cluster使用,簇内每一个核心可以单独开关、调整频率/电压,能效表现更佳,甚至…...

vue解决部署文件缓存方式

问题:系统上线后,除了bug。紧急修复后,发现安卓正常,ios上海市有问题。通过debug后发现,ios上缓存严重。于是想到了打包文件加时间戳的方式来去除缓存。 vue2 配置打包输出文件名方式: const baseUrl &qu…...

游戏开发中的噪声算法

一、噪声 噪声是游戏编程的常见技术,广泛应用于地形生成,图形学等多方面。 那么为什么要引入噪声这个概念呢?在程序中,我们经常使用直接使用最简单的rand()生成随机值,但它的问题在于生成的随机值太“随机”了&#xf…...

CodeReview 小工具

大家开发中有没有遇到一个版本开发的非常杂,开发很多个项目,改动几周后甚至已经忘了自己改了些什么,领导要对代码review的时候,理不清楚自己改过的代码,只能将主要改动的大功能过一遍。这样就很容易造成review遗漏&…...

UE5 C++ Slate独立程序的打包方法

在源码版安装目录内找到已编译通过的xxx.exe,(\Engine\Binaries\Win64\xxx.exe),在需要的位置新建文件夹,拷贝源码版Engine内的Binaries、Content、Shaders文件夹到目标文件夹内,将xxx.exe放入对应位置,删除…...

探索设计模式的魅力:一篇文章让你彻底搞懂建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在将一个复杂对象的创建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。 主要角色: 产品(Product):表示正在构建…...

Facebook广告投放指南,如何运营多个Facebook广告账户不被封?

许多卖家做广告投放会选择 Facebook 作为主要的业务和产品推广平台。然而,要在这个竞争激烈的平台上脱颖而出并成功拓宽广告覆盖面并不容易,通常情况下大家会运营多个Facebook广告账号,但是很多人因此遭遇Facebook账号被封的情况,…...

音乐人声分离工具:极简的人声和背景音乐分离工具

项目地址:jianchang512/vocal-separate: an extremely simple tool for separating vocals and background music, completely localized for web operation, using 2stems/4stems/5stems models 这是一个极简的人声和背景音乐分离工具,本地化网页操作&a…...

Go语言基础快速上手

1、Go语言关键字 2、Go数据类型 3、特殊的操作 3.1、iota关键字 Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。 const (a iota // 0b // 1c 100 // 100d // 100 (与上一…...

Excel 根据日期按月汇总公式

Excel 根据日期按月汇总公式 数据透视表日期那一列右击,选择“组合”,步长选择“月” 参考 Excel 根据日期按月汇总公式Excel如何按着日期来做每月求和...

使用 crypto-js 进行 AES 加解密操作

在前端开发中,数据的加密和解密是为了保障用户隐私和数据的安全性而常见的任务。AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感信息的传输和存储。本文将介绍 AES 加解密的基本原理,并…...

Vue-30、Vue非单文件组件。

非单文件组件&#xff1a; 一个组件包含n个组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>非单文件组件</title><script type"text/javascript" src"https://cdn.jsde…...

卡梅德生物技术快报|噬菌体随机肽库筛选实战:花生过敏原 Ara h 5 模拟表位鉴定全流程

摘要本文面向生物研发、体外诊断、蛋白质工程开发者&#xff0c;系统讲解噬菌体随机肽库筛选过敏原模拟表位完整工程化流程&#xff1a;从问题分析、实验设计、关键参数到结果验证&#xff0c;提供可复现技术方案&#xff0c;基于真实研究数据&#xff0c;聚焦高可靠性表位筛选…...

RK3588 Android系统签名实战:为APK获取系统权限完整指南

1. 项目概述与核心价值在嵌入式Android开发领域&#xff0c;尤其是基于瑞芯微&#xff08;Rockchip&#xff09;平台如RK3588进行产品研发时&#xff0c;我们常常会遇到一个核心需求&#xff1a;如何让一个普通的第三方APK应用&#xff0c;获得系统级&#xff08;System&#x…...

软考高项案例分析8:项目风险管理

软考高项案例分析8:项目风险管理 一、项目风险管理过程 1、规划风险管理; 2、识别风险; 3、实施定性风险分析; 4、实施定量风险分析; 5、规划风险应对; 6、实施风险应对; 7、监督风险; 二、案例分析知识点 1. 风险应对措施 威胁应对策略:上报、规避、转移、…...

第九届蓝桥杯国赛b组--备战国赛版h

第一题&#xff1a;0换零钞 - 蓝桥云课 模拟 #include <bits/stdc.h> using namespace std; int main() {int a,b,c0;for(a1;a<200;a)//一元钞票{for(b1;b<100;b)//两元钞票{for(c1;c<40;c)//五元钞票{if(ba*10&&(ab*2c*5)200){cout<<abc<&l…...

2026毕业答辩PPT模板实测:三个平台的真实体验与避坑建议

又到毕业答辩季&#xff0c;不少同学论文写完了&#xff0c;却被PPT卡住&#xff1a;排版乱、配色杂、结构不清&#xff0c;明明内容扎实&#xff0c;呈现效果却大打折扣。作为经常接触办公工具的博主&#xff0c;我实测了几个常见的PPT模板与制作平台&#xff0c;重点针对本科…...

拒绝C盘爆红!自制 Windows 系统垃圾一键清理工具(精美UI设计)

你的 C盤 又红了吗&#xff1f;相信很多 Windows 用户都经历过被 **“C盘空间不足”** 支配的恐惧。随着日常办公、浏览网页、系统更新&#xff0c;各种临时文件和日志会悄悄吞噬掉我们珍贵的固态硬盘空间。市面上的清理软件鱼龙混杂&#xff0c;要么捆绑软件&#xff0c;要么后…...

Captain AI:Ozon售后全流程智能化,降低损失,提升复购

售后运营是Ozon店铺稳定发展的关键&#xff0c;优质的售后体验能提升买家复购率、维护店铺口碑&#xff0c;而国内商家在售后运营中&#xff0c;常常面临“时差响应慢、纠纷处理不专业、退换货流程繁琐”的问题&#xff0c;导致买家差评增加、店铺权重下降&#xff0c;甚至产生…...

TVA:打通数字AI到物理AI的关键桥梁(系列)

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

AI人工智能行业的现状:为什么说AI从业者的需求越来越大

一、AI产业爆发式增长&#xff1a;需求激增的时代底色2026年&#xff0c;人工智能产业已步入爆发式增长的黄金期&#xff0c;成为驱动全球经济复苏与产业变革的核心引擎。从全球市场来看&#xff0c;2025年AI市场规模达7575.8亿美元&#xff0c;同比增长18.7%&#xff0c;预计2…...

对比按需计费与 Token Plan 套餐哪种方式更适合长期项目

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按需计费与 Token Plan 套餐哪种方式更适合长期项目 在长期且用量稳定的开发项目中&#xff0c;如何选择成本模型是技术决策的…...