最新《北风网Python零基础人工智能就业教程》


<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 开启状态 -->
    <item
            android:id="@+id/state_on"
            android:state_selected="true"
            android:drawable="@drawable/bt_switch_01"/>

    <!-- 关闭状态 -->
    <item
            android:id="@+id/state_off"
            android:state_selected="false"
            android:drawable="@drawable/bt_switch_10"/>

    <!-- 开启切换到关闭的动画 -->
    <transition
            android:fromId="@id/state_on"
            android:toId="@id/state_off">
        <animation-list>
            <item
                    android:drawable="@drawable/bt_switch_01"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_02"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_03"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_04"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_05"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_06"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_07"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_08"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_09"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_10"
                    android:duration="30"/>
        </animation-list>
    </transition>

    <!-- 关闭切换到开启的动画 -->
    <transition
            android:fromId="@id/state_off"
            android:toId="@id/state_on">
        <animation-list>
            <item
                    android:drawable="@drawable/bt_switch_10"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_09"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_08"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_07"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_06"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_05"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_04"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_03"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_02"
                    android:duration="30"/>
            <item
                    android:drawable="@drawable/bt_switch_01"
                    android:duration="30"/>
        </animation-list>
    </transition>
</animated-selector>

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”,然后点击右边的搜索按钮

输入框红色的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]


黄色的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 python

import 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:
            break
        driver.swipe(x1,y1,x1,y2)
        time.sleep(0.5)
--------------------- 

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 python

import 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.
--------------------- 
1229 

猜你喜欢

转载自blog.csdn.net/Laoyan9/article/details/89764021