Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice

最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice

它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDriverAgent( WDA ),这也就意味着 Windows 可以直接运行 iOS 自动化脚本

进入到虚拟环境,先安装 tidevice 的依赖包

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

将 iPhone 设备连接到电脑上,就可以使用 tidevice 提供的功能了

查看设备列表

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

安装、卸载应用

安装对应的关键字为:「 install 」

tidevice 同时支持安装本地 ipa 包和远链下的 ipa 应用包

另外,tidevice 可以使用「 --udid 」参数将应用安装到某一台设备中

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

已安装应用及名称、版本

使用「 tidevice applist 」命令,可以查看设备上已经安装的应用、应用名称、应用版本号

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

设备信息

利用「 tidevice info 」可以查看设备信息,比如:设备序列号、系统版本、CPU、本机号码、时间戳、蓝牙地址、MAC 地址等信息

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

如果要查看设备的电池信息,可以使用关键字 「 --domain + 应用包名 」来获取

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

系统日志及更多帮助

查看系统日志的命令为:「 tidevice syslog 」,当然也可以配置 grep 参数进行过滤

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

要完成 iOS 端的自动化,我们还需要做一些准备工作

安装 WDA

需要将 WebDriverAgent 安装到 iOS 设备上,通过它驱动手机进行一系列自动化操作

PS:由于 Facebook WDA 很长时间没有更新了,这里建议直接使用 Appium WDA

https://github.com/appium/WebDriverAgent

下载项目后,使用 Xcode 打开,Scheme 选择 WebDriverAgentRunner,设备选择真机

然后配置开发者证书,可以参考下面链接进行配置

https://testerhome.com/topics/7220

最后,Xcode 选择 Project 下的 Test 将项目运行到真机设备上

意:第一次运行 WDA 可能运行失败,需要手动在设置中对证书添加信任

运行 WDA

真机设备安装完 WDA 后,就可以脱离 Mac,使用 Windows 进行自动化操作了

使用「 tidevice wdaproxy 」命令可以运行 WDA 和端口转发

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

PS:由于 Xcode 设置证书的时候,更改过 bundle_id,所以这里的包名是一个变量

编写自动化脚本

接下来,就可以使用 Appium 或 facebook-wda 编写脚本并运行到 iOS 设备上了

以 facebook-wda 为例

首先,我们安装对应的依赖

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用

接着,编写自动化脚本并运行测试

阿里这款 iOS 端自动化工具的主要优点是启动速度快,内存占用低;更重要的是,它是跨平台,稳定性相对较高

不知道大家有没有发现,有一些模块、一些代码会频繁出现。而os、shutil、glob基本是每篇都会出现。

在写了几十篇文章后,我将一些办公自动化常用操作的代码单独整理出来,大家拿走就可以用在自己的脚本中!

OS模块相关

一、遍历文件夹

批量操作的前提就是对文件夹进行遍历,使用os模块可以轻松的遍历文件夹,os.walk 遍历后产生三个参数:

代码如下,大家可以根据自己的路径进行修改

import os    for dirpath, dirnames, filenames in os.walk(r'C:\\Program Files (x86)'):    print(f'打开文件夹{dirpath}') # 当前文件夹路径     if dirnames:        print(dirnames) # 包含文件夹名称[列表形式]     if filenames:        print(filenames) # 包含文件名称[列表形式]    print('-' * 10)
​x import osbr    brfor dirpath, dirnames, filenames in os.walk(r'C:\\Program Files (x86)'):br    print(f'打开文件夹{dirpath}') # 当前文件夹路径 br    if dirnames:br        print(dirnames) # 包含文件夹名称[列表形式] br    if filenames:br        print(filenames) # 包含文件名称[列表形式]br    print('-' * 10)br

当手上的需求明确有获取给定路径各级文件夹下所有符合条件的文件,并进行相应的批处理操作时,即可使用 os.walk

二、 目标路径是否是文件

有时我们需要判断一个目录下是否存在文件也可以使用os模块。

给定一个目标路径 path ,通过一行代码就能够判断这是文件还是文件夹路径

import ospath = 'xxx'print(os.path.isfile(path))
xxxxxxxxxxbr import osbrbrpath = 'xxx'brprint(os.path.isfile(path))br

三、获取路径中的文件名

os.path.basename 可以直接从绝对路径中获取最后的文件名,当然如果用传统的字符串切割方式也可以,即 path.split('\\')[-1]

import ospath = 'xxx'print(os.path.basename)
xxxxxxxxxxbr import osbrbrpath = 'xxx'brprint(os.path.basename)br

四、创建文件夹

创建文件夹的代码非常常用,因为往往生成的新文件都希望有个新的文件夹存储,代码如下:

import osdirpath = 'xxx'os.mkdir(dirpath)
xxxxxxxxxxbr import osbrbrdirpath = 'xxx'bros.mkdir(dirpath)br

但是,如果希望创建的文件夹已经存在,再运行 os.mkdir() 则会报错而终止代码。为了避免这一情况的发生,可以在创建文件夹之前先判断文件夹是否存在。

用到的代码是 os.path.exists,只有当路径不存在(即 os.path.exists 返回的结果是 False 时),才会创建:

import osdirpath = 'xxx'if not os.path.exists(dirpath):    os.mkdir(dirpath)
xxxxxxxxxxbr import osbrbrdirpath = 'xxx'brif not os.path.exists(dirpath):br    os.mkdir(dirpath)br

五、获取桌面路径

获取桌面路径也是非常常用的操作,可以使用os.path.join(os.path.expanduser("~"), 'Desktop') 获取桌面的绝对路径。

这样做的好处是可以把数据放在桌面上,在不同的电脑上都能调用代码对数据进行处理。如果是在一条电脑上把桌面路径固定在字符串中,则换一台电脑就必须修改桌面路径。代码如下:

import osdesktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')print(desktop_path)
xxxxxxxxxxbr import osbrbrdesktop_path = os.path.join(os.path.expanduser("~"), 'Desktop')brprint(desktop_path)br

当然把上面的代码包装成一个函数 GetDesktopPath() 需要时调用它会更加方便

import osdef GetDesktopPath():    return os.path.join(os.path.expanduser("~"), 'Desktop')
xxxxxxxxxxbr import osbrbrdef GetDesktopPath():br    return os.path.join(os.path.expanduser("~"), 'Desktop')br

六、重命名文件/文件夹

需要用到 os.rename() 方法,下面的代码示例中分别演示如何重命名文件和文件夹

import osos.rename('practice.txt', 'practice_rename.txt')  # 重命名文件os.rename('文件夹1', '文件夹2') # 重命名文件夹
xxxxxxxxxxbr import osbrbros.rename('practice.txt', 'practice_rename.txt')  # 重命名文件bros.rename('文件夹1', '文件夹2') # 重命名文件夹br

七、批处理文件 - 1

除了前面的 os.walk 之外,有其他的 os 模块下方法可完成获取指定路径的全部或符合条件的文件(非遍历各级文件夹的需求),还可以使用下面两个代码 第一种用到的方法是os.scandir(),使用如下:

import ospath = 'xxx'for file in os.scandir(path):     print(file.name, file.path)
xxxxxxxxxxbr import osbrbrpath = 'xxx'brfor file in os.scandir(path): br    print(file.name, file.path)br

八、批处理文件 - 2

上面代码最后输出的是 给定路径下各内容的名字、绝对路径第二种方法使用 os.listdir(),它比 os.scandir() 简单一些,可直接调用输出名称而非路径:

import os path = 'xxx'for file in os.listdir(path):    print(file)
xxxxxxxxxxbr import os brbrpath = 'xxx'brfor file in os.listdir(path):br    print(file)br

02

shutil模块相关

九、移动文件/文件夹

shutil也是经常出现在办公自动化场景中的模块,我常用的就是移动文件/文件夹

需要用到shutil.move 方法,下面的代码示例中分别演示如何移动文件和文件夹:

import shutil shutil.move(r'.\practice.txt', r'.\文件夹1/') shutil.move(r'.\practice.txt', r'.\文件夹1/new.txt')
xxxxxxxxxxbr import shutil brbrshutil.move(r'.\practice.txt', r'.\文件夹1/') brshutil.move(r'.\practice.txt', r'.\文件夹1/new.txt')br

注意到上面后两行代码的区别吗?前一行是将目标文件移动到目标文件夹里,而后一行,在将目标文件移动到目标文件夹里的同时,能够对其进行重命名

也就是说,如果我们需要移动某个或某些文件到新的文件夹,并且需重命名文件,则我们并不需要用 os.rename 先命名文件再用 shutil.move 将其移动的指定文件夹,而是可以用 shutil.move 一步到位

03

glob模块相关

十、批处理文件 - 3

最后要介绍的是glob模块,也是办公自动化必须要掌握的一个模块,同样可以用于批处理文件。

glob 最重要的功能就是搜索获取同一级或者各子级下符合条件的文件(绝对路径),非常适合写批处理的代码。

有时候我们需要对大量文件进行相同操作,在写完针对一份文件的操作后,只需要加上几行代码,就可以完成批处理全部文件的工作。大致代码框架如下:

import glob    for file in glob.glob('**/*', recursive=True):     print(file)
xxxxxxxxxxbr import globbr    brfor file in glob.glob('**/*', recursive=True): br    print(file)br

glob.glob() 是一个非常重要的方法,能够获取给定路径下文件的绝对路径,并且接受「通配符」搜索,大大拓宽了灵活程度,* 表示任意字符长度,**/* 的使用表示用通配符指代给定路径下的任何一层,recursive 参数允许遍历搜索。


以上就是我为大家整理的十个常用操作的代码,大部分都是可以通用的,大家可以收藏本文,并在需要进行相关操作的时候可以直接复制粘贴使用。

另外也希望大家在自己写代码、读别人代码时,可以多去思考哪些函数/代码片段是可以为我所用,这样才会进步的更快!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/69858.html

(0)

相关推荐

  • 江西工业规模,江西省的工业发展状况

    江西省位于我国华东地区,省内山地、丘陵占主要国土面积的主要部分。江西省内有色金属矿产比较丰富,铜矿、钨矿、锂矿、稀土矿产矿藏在全国占有重要地位。围绕着有色矿山的开发利用,经过几十年的发展,江西已经有大批的矿山开采,冶炼,加工企业。

    生活 2021年10月21日
  • 星途半价抢购,星途优惠最新消息

    文章长度:0太短了,请勿浪费资源

    科技 2021年10月23日
  • 做我的妈妈不容易,当妈妈太难了

    为了要个孩子,我几乎跑遍了昆明各大医院,我们是一个特殊群体,好多人不理解,觉得我们这样的人好像神经病,要个孩子花几十万天天上医院,最终还没有成功,谁也不是傻愚蠢,我为什么那么想要个孩子,因为我是个女人,我也想做个妈妈,可是如今社会,医生很没有医德,我从2019年就踏上试管之路,经历4促2移都没有成功,花了钱受了罪,最终医院也没有给明确病因,只会让休息几个月在去尝试。如今我是下定决心了,不在继续促排了,我打算供,但是去医院咨询时,医生确告诉我,让等电话,放了一个长把伞给我,这个电话不知道什么时候能等到,告诉我前面排队的人很多,我真心很累,我已经妥协放弃自己了,想用另一种方式得到宝宝,老天还这么折磨我,我是上辈子造了什么孽,这辈子尝尽痛苦,受尽人间轮回,我也只是想要做妈妈,要个孩子就那么难吗?很多人不理解,觉得我们这群人是病态的,我只想说,那是因为你没在经历过,当你没在任何亲戚朋友,出生一个单亲家庭,从小没有爸爸,只有个亲妈,亲妈还给你找了个继父,你就能感同身受,真的想要有一个孩子,哪怕以后自己看了能和自己做伴,也是一种幸福

    生活 2021年11月7日
  • 多屏协同帮您手机电脑二合一,让您一个屏幕两个系统,高效办公

    一、华为分享标签内置,碰一碰触控板就能连接华为MateBook 系列2021版笔记本电脑的华为分享感应标签被内置在触控板中,感应面积更大,触碰准确率更高,用手机碰一碰电脑触控板,就能将手机窗口“分身”到电脑桌面,您就可以在电脑上自由操控手机。

    科技 2021年11月25日
  • 孕期左侧躺是最好的睡姿吗?注意“睡错觉”是有害的,每个阶段都有自己的压力。

    怀孕不是一件轻松的事,从一身轻盈到挺着大肚,孕妈们不仅腰酸背痛、行动不便,还得时刻担忧胎儿的状况,连睡觉都不敢放松。

    生活 2021年11月12日
  • 微信更新,把权限还给用户。

    果粉之家,专业苹果手机技术研究十年!您身边的苹果专家~

    科技 2021年10月30日