2.Python+uiautomator2登录考研帮

环境配置可以参考:https://github.com/openatx/uiautomator2

1.启动夜神模拟器

不要开启各种安全卫士,不然夜神模拟器会莫名其妙的卡在99%处。将夜神模拟器改成手机版,一般默认是平板。


2.在cmd下输入:adb devices查看已连接设备。

正常情况下,会有如下输出,如果没有,测试下adb有没有加入到环境变量,在cmd里输入adb,或者adb version,是否报错。


3.在cmd下输入:python -m weditor

它会自动在浏览器打开一个窗口


Weditor旁边默认是Android,如果不是,改回Android,往右填写的是ip地址和端口号,如果是模拟器,就填写第二步adb devices输出的那个地址和端口。点一下连接,如连接成功,旁边会显示稻穗。灰色框里会出现夜神的界面。如果灰色框内手机界面是黑屏,可以在模拟器里打开强制渲染,然后reload下Weditor;如果还不行,重启夜神模拟器;如果还不行,执行下图框内动作。关于黑屏的以上不分先后,可循环多次执行。在渲染开启后如果黑屏消失,可以关了渲染。(下图来自:github)

4.pycharm进场

首先看下是否连接:



有信息输出,说明连接成功了。

5.获取app名称


上图右侧这些键值对都可以使用,这里先使用最简单的位置信息,将下面的位置代码复制一下并执行也可以使用xpath(d.xpath("//android.widget.TextView[@text='考研帮']").click())

import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
print(d.info)

将会看到考研帮APP已经启动了



在weditor里reload一下,让两者同步




然后定位下“跳过”的键值对,备用。

现在代码进行到跳过这一步了,代码如下:

import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
d.click(0.482, 0.532)
d(resourceId="com.tal.kaoyan:id/tv_skip").click()

在模拟器里将应用的数据清除下就可以执行上面的代码了



6.执行登录

和上面类似,定位用户名,密码,登录按钮,执行代码就好。在执行之前先清理下应用数据,或者在代码里面加判断。
代码如下:

# -*- coding: utf-8 -*-
# @AuThor  : frank_lee
import uiautomator2 as u2
d = u2.connect('127.0.0.1:62001')
# d.click(0.482, 0.532)
d.xpath("//android.widget.TextView[@text='考研帮']").click()
d(resourceId="com.tal.kaoyan:id/tv_skip").click()
d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密码")
d(resourceId="com.tal.kaoyan:id/login_login_btn").click()


对于这种跳出的对我们无用的信息,我们需要跳过或叉掉,叉掉前需要加以判断,有没有出现这些元素,如果没出现而执行了该动作势必会报错。
类比上述步骤,可以使用代码执行登录,并滑动“休闲空间”某个神奇的板块
代码如下:

# -*- coding: utf-8 -*-
# @AuThor  : frank_lee
import uiautomator2 as u2
import time
# 连接模拟器
d = u2.connect('127.0.0.1:62001')
# 打开考研帮
try:
    if d.xpath("//android.widget.TextView[@text='考研帮']").wait(3):
        d.xpath("//android.widget.TextView[@text='考研帮']").click()
        time.sleep(2)
except:
    pass
# 点击跳过页面
try:
    if d(resourceId="com.tal.kaoyan:id/tv_skip").wait(3):
        d(resourceId="com.tal.kaoyan:id/tv_skip").click()
except:
    pass
try:
    # 实现登录
    if d(resourceId="com.tal.kaoyan:id/login_email_edittext").wait(2):
        d(resourceId="com.tal.kaoyan:id/login_email_edittext").send_keys("starrymusic")
        d(resourceId="com.tal.kaoyan:id/login_password_edittext").send_keys("我是密码")
        time.sleep(1)
        d(resourceId="com.tal.kaoyan:id/login_login_btn").click()
        time.sleep(2)
except:
    pass
try:
    # 下线通知
    if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
        d(resourceId="com.tal.kaoyan:id/tip_commit").click()
        time.sleep(2)
    # 发现新版本
    if d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").wait(3):
        d(resourceId="com.tal.kaoyan:id/view_wemedia_cacel").click()
        time.sleep(2)
    # 隐私条款
    if d(resourceId="com.tal.kaoyan:id/tv_agree").wait(3):
        d(resourceId="com.tal.kaoyan:id/tv_agree").click()
        time.sleep(3)
    # 下线通知
    if d(resourceId="com.tal.kaoyan:id/tip_commit").wait(3):
        d(resourceId="com.tal.kaoyan:id/tip_commit").click()
        time.sleep(2)
except:
    pass
try:
    # 点击下面社区板块
    if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
        d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
        time.sleep(0.5)
        d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").click()
        time.sleep(1)
        # 上面为什么执行两次,规避弹出页
        # 点击更多板块
    if d(resourceId="com.tal.kaoyan:id/mainactivity_button_forum").wait(3):
        d(resourceId="com.tal.kaoyan:id/hotthread_recommend_moreforum").click()
        time.sleep(1)
    # 点击休闲空间
    if d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休闲空间").wait(3):
        d(resourceId="com.tal.kaoyan:id/more_forum_title", text=u"休闲空间").click()
        time.sleep(2)
        d(scrollable=True).scroll.to(text="玫瑰初相遇")
    # 点击'玫瑰初相遇'板块
    if d.xpath("//android.widget.TextView[@text='玫瑰初相遇']").wait(3):
        d.xpath("//android.widget.TextView[@text='玫瑰初相遇']").click()
        time.sleep(3)
        # 执行滑动动作,滑动20次
        i = 0
        while i < 10:
            d(scrollable=True).scroll.toEnd(steps=50)
            time.sleep(2)
            d(scrollable=True).scroll.toEnd(steps=50)
            time.sleep(2)
            i += 1
except:
    pass

你可能感兴趣的:(2.Python+uiautomator2登录考研帮)