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

引言

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

所需环境

python 这里我用的是3.6

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

模拟器:mumu 模拟器

环境配置

模拟器

mumu 模拟器下载地址
查看模拟器安卓版本
打开设置一直往下滑看到 关于平板电脑 点进去就可以看到Android 版本了
在这里插入图片描述

Appium

Appium 安装地址

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

Android SDK 下载

这里我用的是一个国内的 Android 工具的下载网站,因为官方的下载慢。。
在这里插入图片描述
在这里插入图片描述
建议下载24.4.1 里的工具,window 版本的小伙伴建议下载我圈起来的那个

Android SDK 环境配置

1,安装好SDK 之后 ,打开目录
在这里插入图片描述
2,这张图我是当初安装的时候上网找到的,作者是谁我忘记了,推荐参考这个来安装
注:Android sdk 版本是向下兼容的,你可以只安装一个比你安卓版本高一个版本的就可以了,当然你也可以从9一直安装到你模拟器的版本,再低的就不要安装了
在这里插入图片描述
3,下载好sdk 版本之后就到了 ,配置环境变量,新建一个ANDROID_HOME,值写你的安装地址
在这里插入图片描述
4,在环境变量里找到 Path
新建
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
%ANDROID_HOME%\build-tools\28.0.0
在这里插入图片描述
5,打开Appium,把我们的jdk和sdk目录填上去就可以了
在这里插入图片描述
6,开启Appium 服务,进入到版面之后点击这个长得像搜索框的搜索框
在这里插入图片描述
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里配置的
在这里插入图片描述
appPackage:app包名
appActivity:app活动类名
在这里插入图片描述
保存后,点击启动会话,到这里环境配置就算是完工了

利用Appium 获取抖音按键demo

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

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

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

代码实现自动化点击

业务目标

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

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

adb connect 127.0.0.1:7555
adb devices

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后开启我们的 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!

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
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的教程

猜你喜欢

转载自blog.csdn.net/fuckingGOD/article/details/117918494