python+appium 实现抖音自动化点击滑动

引言

本篇文章环境配置是又臭又长,想直接看代码的老铁,可以直接跳到后边

所需环境

python 这里我用的是3.6

appium 所需要的环境配置:
jdk1.8.0
android sdk

模拟器:mumu 模拟器

环境配置

模拟器

mumu 模拟器下载地址
查看模拟器安卓版本
打开设置一直往下滑看到 关于平板电脑 点进去就可以看到Android 版本了
python+appium 实现抖音自动化点击滑动_第1张图片

Appium

Appium 安装地址

jdk 安装地址
jdk 环境配置教程

Android SDK 下载

这里我用的是一个国内的 Android 工具的下载网站,因为官方的下载慢。。
python+appium 实现抖音自动化点击滑动_第2张图片
python+appium 实现抖音自动化点击滑动_第3张图片
建议下载24.4.1 里的工具,window 版本的小伙伴建议下载我圈起来的那个

Android SDK 环境配置

1,安装好SDK 之后 ,打开目录
python+appium 实现抖音自动化点击滑动_第4张图片
2,这张图我是当初安装的时候上网找到的,作者是谁我忘记了,推荐参考这个来安装
注:Android sdk 版本是向下兼容的,你可以只安装一个比你安卓版本高一个版本的就可以了,当然你也可以从9一直安装到你模拟器的版本,再低的就不要安装了

3,下载好sdk 版本之后就到了 ,配置环境变量,新建一个ANDROID_HOME,值写你的安装地址
python+appium 实现抖音自动化点击滑动_第5张图片
4,在环境变量里找到 Path
新建
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\build-tools\28.0.0
python+appium 实现抖音自动化点击滑动_第6张图片
5,打开Appium,把我们的jdk和sdk目录填上去就可以了
python+appium 实现抖音自动化点击滑动_第7张图片
6,开启Appium 服务,进入到版面之后点击这个长得像搜索框的搜索框
python+appium 实现抖音自动化点击滑动_第8张图片
7,配置连接模拟器的参数,具体的参数
注: 这里我是根据mumu 模拟器来的,如果有老铁用的是其它的模拟器的话,就只能自己去百度了
{
“platformName”: “Android”,
“deviceName”: “127.0.0.1:7555”,
“platformVersion”: “6.0.1”,
“appPackage”: “com.ss.android.ugc.aweme”,
“appActivity”: “com.ss.android.ugc.aweme.splash.SplashActivity”,
“noReset”: true,
“unicodekeyboard”: true,
“resetkeyboard”: true
}
字段解析
platformName:操作系统
deviceName:当前设备端口号。使用的哪个模拟器,7555是mumu模拟器,7555端口号是在安装目录emulator\nemu\vms\myandrovm_vbox86\myandrovm_vbox86.nemu里配置的
python+appium 实现抖音自动化点击滑动_第9张图片
appPackage:app包名
appActivity:app活动类名
python+appium 实现抖音自动化点击滑动_第10张图片
保存后,点击启动会话,到这里环境配置就算是完工了

利用Appium 获取抖音按键demo

打开我们的模拟器,安装好抖音

启动我们的 Appium 会话,我们就会进到这个选取demo页面
python+appium 实现抖音自动化点击滑动_第11张图片
1,当我们点击他的父节点会发现页面全选了
python+appium 实现抖音自动化点击滑动_第12张图片
2,这时候就得一个个点进他的子节点,一个个找我们需要的按键demo,比如:搜索框。
/*
如何获取有用的信息?
*/
resource-id 这个是我们需要的东西,用来定位到 demo位置的 结果id
如何判断按键demo是否可以点击,clickable 为 true,意味着这个demo可以点击
如果clickable 为 false ,我这里的想法是写到 try 方法里边模拟鼠标强制点击,或者使用swipe来实现点击
重要的是: resource-id 会在抖音每一次更新过后会发生改变
python+appium 实现抖音自动化点击滑动_第13张图片

demo拿到了,我们开始撸代码

代码实现自动化点击

业务目标

  • 进入抖音,点击搜索框,输入美女搜索,点击用户demo,出现用户列表之后,点击进入到用户详情页之后返回点击下一个用户。

1,第一步先开启服务让appium连接到模拟器,进入到sdk目录下边的 platform-tools 。进入cmd,输入

adb connect 127.0.0.1:7555
adb devices

在这里插入图片描述
在这里插入图片描述
python+appium 实现抖音自动化点击滑动_第14张图片

然后开启我们的 Appium 启动服务

2,代码连接模拟器

from appium import webdriver

option= {}
option['platformName'] = 'Android'
option['platformVersion'] = '6.0.1'  # 对应模拟器版本
option['deviceName'] = '127.0.0.1:7555'
# app信息,aapt可以查
option['appPackage'] = 'com.ss.android.ugc.aweme'  
option['appActivity'] = '.splash.SplashActivity'
# 键盘配置,不用键盘可以不配,用完需要手动恢复下手机键盘,appium不会自动恢复
option['unicodeKeyboard'] = 'true'  # 使用Unicode键盘
option['resetKeyboard'] = 'true'  # 重置当前输入法
# APP是否重新设置,没有这个每次都会重新设置
option["noReset"] = "true"

# 连接设备  4723是Appium的端口号
driver = webdriver.Remote("http://localhost:4723/wd/hub", option)

3,自动点击进入用户列表界面

#得到窗口大小
def get_size():
    x=driver.get_window_size()['width']
    y=driver.get_window_size()['height']
    return x, y
    
def click_info():

    driver.implicitly_wait(10)
    # 点击搜索
    driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.ss.android.ugc.aweme:id/ctd")').click()
    time.sleep(3)
    
    driver.implicitly_wait(10)     # 因为**模拟器很卡,所以睡久点
    # 点击搜索,输入内容
    shuru = driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.ss.android.ugc.aweme:id/aia")')
    shuru.send_keys(u'美女')
    shuru = driver.find_element_by_id('com.ss.android.ugc.aweme:id/kqe').click()
    # driver.swipe(shuru)
    #  因为这里的搜索按钮clickable 为false ,强制点击
    try:
        ActionChains(driver).click(shuru).perform() # 点击确认位置-搜索键
    except:
        pass
    time.sleep(3)

    driver.implicitly_wait(10)
    # 点击用户框
    user = driver.find_elements_by_id('android:id/text1')[2]
    user.click()
    time.sleep(3)

4,

  • 进入用户列表界面之后我们再用Appium 查看抖音键位demo之后 发现 用户列表的 clickable事件为 false ,思路我上边也写了,我这里用的是swipe点击;
  • 在观察发现,他们的 resource-id 都长得一样,意味着我们上边的那种利用resource-id 定位的方法没用了,这里我换一个思路,仔细观察发现,最下边有个 bounds 里边有他们的坐标,这样意味着我们可以利用坐标来获取点击,nice!

python+appium 实现抖音自动化点击滑动_第15张图片
在这里插入图片描述

在这里插入图片描述
5,坐标获取

# 屏幕向上滑动
def swipe(time = 1000):
    # 窗口大小
    size = get_size()
    # time = 1000 ms  = 1秒
    # 获取到第一个用户列表的坐标 [0,209][810,334]
    x1 = int(size[0] * 0)
    x2 = int(size[0] * 1)
    y1 = int(size[1] - 1231)
    y2 = int(size[1] - 1106)
    # 点击
    time.sleep(1)
    driver.swipe(x1, y1, x2, y2,time)
    time.sleep(3)
    
    # 点击返回
    driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.ss.android.ugc.aweme:id/l6")').click()
    time.sleep(3)
    
    # 屏幕上滑 第二个坐标 [0,351][810,528]
    a1 = int(size(0) * 0)
    a2 = int(size[0] * 1)
    b1 = y1 + 142
    b2 = y2 + 194
    time.sleep(1)
    driver.swipe(x1, y1, x2, y2,time)
    time.sleep(3)
time.sleep(5)

for i in range(1,1000):
    swipe()
    print(i)

总结

如果坐标点击出问题的话,可以多试试几个坐标。
完整代码就是上边的一个个模块拼接起来,如果有什么不懂的,欢迎留言
如果对你有帮助不妨一键三连,不客气
在这里插入图片描述

参考文章:0到1的教程

你可能感兴趣的:(教程,笔记,黑科技,python,经验分享,爬虫,后端)