原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:「docker实战篇」python的docker-抖音appium模拟滑动操作(22)

上次代码写到了可以通过接口获取粉丝的数据了,但是当时有个问题,需要人为的手动进行点击头像,然后点击粉丝,进入粉丝列表,然后在下拉刷新获取最新的粉丝。之前都说过appium模拟器可以帮咱们做这些事,下面通过appium来进行操作吧。源码:https://github.com/limingios/dockerpython.git (douyin)

抖音短视频的操作步骤(一)

1.首先通过模拟器打开抖音,等待加载完毕。

2.完全进去后,左上角有个放大镜的窗口,点击搜索框,输入抖音ID(191433445)

3.点击用户的标签,点击头像,在点击进入“陈赫” 前,先看看关注的标签是否存在

4.进入“陈赫”页面后,点击粉丝,然后进行模拟滑动,通过上节的实际使用的(mitmdump)解析粉丝数据存入数据库中。

编写python的脚本通过appium操作抖音(二)

  • 准备工作
    1.取消模拟器代理

2.下载抖音apk

http://acj3.pc6.com/pc6_soure/2019-2/com.ss.android.ugc.aweme_500.apk

3.查看抖音apk的信息

查看appPackage和appActivity
1.进入安卓sdk目录下找到build-tools
2.随便选择一个版本号
3.通过cmd进入这个目录
4.输入命令获取aapt.exe dump badging 包名(必须在sdk的build-tools的版本的版本号的 aapt.exe目录下执行)

只能获取appPackage=com.ss.android.ugc.aweme,appActivity获取不到

用另一个变态的方式

#获取列表
adb devices
#进入监控日志
adb -s 127.0.0.1:62025 logcat>E:/log.txt
#启动后,点开抖音,然后查看E盘目录下的log.txt文件

搜Displayed

获取到信息
appPackage: com.ss.android.ugc.aweme
appActivity:com.ss.android.ugc.aweme.main.MainActivity

3.获取安卓的版本号

打开模拟器,进入关于手机查看android的版本4.4.2

4.测试配置

1.启动安卓模拟器
2.启动appium应用
3.启动测试的python代码
4.顺序必须上找上边的

测试的python代码

#!/usr/bin/env pythonimport time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {"platformName": "Android","platformVersion": "4.4.2","deviceName": "127.0.0.1:62001","appPackage": "com.ss.android.ugc.aweme","appActivity": "com.ss.android.ugc.aweme.main.MainActivity","noReset": True,"unicodeKeyboard":True,"resetkeyboard":True
}driver = webdriver.Remote("http://localhost:4723/wd/hub",cap)def get_size():x = driver.get_window_size()['width']y = driver.get_window_size()['height']return(x,y)

开始解析页面的xpath信息(三)

1.关闭上边测试用的appium,单独启动下抖音app

2.暂停播放,启动uiautomatorviewer。源码包中有加强版的uiautomatorviewer。看过之前文章的老铁都懂。一定要暂停,否则uiautomatorviewer。

还需要感叹一句的是,一天时间抖音app升级了,昨天写一半的文章,今天在看【搜索】按钮换到了右边,没事,只要页面有【搜索】按钮就可以了。

搜索按钮的xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]

3.进入搜索页面后,需要先点击搜索框,如果框中存在“191433445”,直接点击,不存在需要在搜索框中输入“191433445”,然后点击右边的搜索按钮

  1. 输入框红色的xpath
//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]

  1. 黄色的xpath
//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]

3.紫色部分搜索按钮xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]

3.搜索结果页面,点击【用户】,点击【头像】,进入【用户信息界面】。

1.用户xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.support.v7.app.ActionBar$Tab[3]/android.widget.LinearLayout[1]/android.widget.TextView[1]

2.用户xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]

4.进入【用户信息界面】,点击红色粉丝这个位置。进入粉丝列表

1.粉丝xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]

python代码的编写

按照上边的业务逻辑开始代码的编写

#!/usr/bin/env pythonimport time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {"platformName": "Android","platformVersion": "4.4.2","deviceName": "127.0.0.1:62001","appPackage": "com.ss.android.ugc.aweme","appActivity": "com.ss.android.ugc.aweme.main.MainActivity","noReset": True,"unicodeKeyboard":True,"resetkeyboard":True
}driver = webdriver.Remote("http://localhost:4723/wd/hub",cap)def get_size():x = driver.get_window_size()['width']y = driver.get_window_size()['height']return(x,y)try:#点击搜索print('点击搜索')if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]")):driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]").click()
except:#[26,76][115,165]driver.tap([(26,76),(115,165)],500)
#定位搜索框
if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]")):#获取douyin_id进行搜索driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").send_keys('191433445')while driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").text != '191433445':driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").send_keys('191433445')time.sleep(0.1)
#点击搜索
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]").click()#点击用户标签
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.TextView[@text='用户']")):driver.find_element_by_xpath("//android.widget.TextView[@text='用户']").click()
#点击头像
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]")):driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]").click()
#点击粉丝按钮
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]")):driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]").click()x1 = int(driver.get_window_size()['width']*0.5)y1 = int(driver.get_window_size()['height']*0.75)y2 = int(driver.get_window_size()['height']*0.25)while True:if '没有更多了' in driver.page_source:breakdriver.swipe(x1,y1,x1,y2)time.sleep(0.5)

PS:因用的是模拟器,导致电脑很卡,如果是真机就好些了,开启usb调试,通过adb devices,查看真机的名称,然后修改python的代码。

「docker实战篇」python的docker-抖音appium模拟滑动操作(22)相关推荐

  1. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...

  2. python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15)...

    原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15) adb(Androi ...

  3. 「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四) 上次说了fiddl ...

  4. 「docker实战篇」python的docker爬虫技术-安卓模拟器(二)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker爬虫技术-安卓模拟器(二) 为什么要手机模拟器,如果有条件正好有不使用的安卓手 ...

  5. bat 自动输入密码_「docker实战篇」python的docker爬虫技术移动自动化uiautomator工具(16)...

    uiautomator 是 安卓4.3之后发布的测试工具,uiautomator是用来做UI测试的.也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期.比如 登陆界面 分别输入正确和错 ...

  6. python爬虫灰产_「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四)...

    上次说了fiddler的抓包和参数介绍,通过fiddler抓包工具可以完成app和web端的数据,这次介绍另一款抓包公司mitmproxy,可以和python语言结合通过爬虫抓取数据. 源码:http ...

  7. python抓包工具_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...

    挑选常用的功能给各位老铁介绍下. fiddler第一次进入fiddlerfiddler会请求fiddler的官网,检查更新操作布局分布 工具栏File -capture traffic开启爬虫File ...

  8. python爬虫抓包工具_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...

    挑选常用的功能给各位老铁介绍下. fiddler 第一次进入fiddler fiddler会请求fiddler的官网,检查更新操作 布局分布 工具栏 File -capture traffic 开启爬 ...

  9. python抓包程序_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...

    fiddler 第一次进入fiddler fiddler会请求fiddler的官网,检查更新操作 布局分布 工具栏 File -capture traffic 开启爬虫 File -new Viewe ...

  10. 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)

    上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...

最新文章

  1. RHEL和Centos系统的区别?
  2. 用Raspberry Pi搭建Azure IOT解决方案
  3. 趣链 BitXHub跨链平台 (5)跨链网关-子模块
  4. python之简单的get和post请求
  5. SAP CRM my task 6个roundtrip的原理讲解
  6. ai训练 样本大小_防止过拟合(三):数据增强(增加训练样本)
  7. 和信虚拟终端的全面部署-虚拟终端网络工程实施
  8. 语音识别 特征提取(一)
  9. Django 链接数据库错误 Strick Mode 解决
  10. c++ 可变参数 log 打印函数实现
  11. 一个复杂页面该如何布局设计
  12. Linux(CentOS)安装MySQL教程
  13. 简单快速!分享给你一款在线jpg格式转换器
  14. 【考研408】计算机与组成原理笔记
  15. DNA与剑桥的老鹰酒吧
  16. LearnOpenGL学习笔记——OpenGL颜色
  17. 华为最新款手机2021款鸿蒙,华为最新款手机2021款_华为2021即将上市新款手机
  18. 原来,PPTV是在筹划国内上市呐!
  19. 【Word】实习证明简易模板
  20. Python网络爬虫实战案例之:7000本电子书下载(2)

热门文章

  1. 使用向量的方法计算点到直线的距离
  2. 【Java】保姆级“方法“教学
  3. Flash动画学习指南七:运动路径
  4. activemq配置wss协议
  5. 混合开发之仿微信朋友圈
  6. springboot异步任务带自定义返回结果和异步任务查看。
  7. Kong插件开发向导
  8. AFL(american fuzzy lop)学习三
  9. 利用CSS3动画让图片动起来
  10. 移动端h5唤起键盘_移动端H5监听键盘弹出和收起