uiautomator模拟过程中的问题

来源:5-4 通过U2实现滑动短视频-2

兰陵小生

2020-07-29

老师我在撰写的过程中遇到了以下的一些问题。

  1. object is not callable
  • 我尝试修改了很多不同的button,都说not callable。这个是为什么?
  1. 有时候代码会在“滑动查看更多”这里反复华东, 当没有这个字的时候也会反复滑动。
  2. 32001 jsonrpc error, 这个有时候会出来,有时候不出来。
  3. 另外请问学了appium是不是就不需要用uiautomator2了是吗
    最后我想真诚的真心的感谢您!我听了很多imooc的课程, 您的课程材料超级全,超级周到。 授课的内容也超级棒和广。感谢您!
    图片描述r图片描述
写回答

2回答

大壮老师

2020-07-30

第四个问题,尽量使用uiautomator2,appium太慢了,是我在18年到19年间课程中使用的工具,目前建议使用uiautomator2。

其他问题,我需要看到你的代码和使用场景。

0
1
兰陵小生
非常感谢!老师真的很棒
2020-07-31
共1条回复

兰陵小生

提问者

2020-07-31

我在提交的另一个新问题,把代码写入。 您的回答很有帮助。 那我就不用去学appium

我把代码在这里也贴一下。 

import uiautomator2 as u2

import time


#针对版本30元抖音版本

class Douyin(object):

    # 在__init__方法里面连接设备

    def __init__(self, serial="7030018020040748"):

        self.d = u2.connect_usb(serial=serial)

        self.start_app()

        self.handle_watcher()

        self.size = self.get_windowsize()

        # 是用来获取一个初始时间

        self.t0 = time.perf_counter()


    def start_app(self):

        """启动app"""

        self.d.app_start(package_name="com.ss.android.ugc.aweme")


    def stop_app(self):

        """app退出逻辑"""

        # 先关闭监视器

        self.d.watcher.stop()

        self.d.app_stop("com.ss.android.ugc.aweme")

        self.d.app_clear("com.ss.android.ugc.aweme")


    def stop_time(self):

        """停止时间"""

        # 时间是秒

        if time.perf_counter() - self.t0 > 50:

            return True


    def handle_watcher(self):

        """监视器"""

        #好的/青少年包含

        self.d.watcher.when('//*[@resource-id="com.ss.android.ugc.aweme:id/m7"]').click()

        #通知权限

        self.d.watcher.when('//*[@resource-id="com.ss.android.ugc.aweme:id/a4r"]').click()

        #运行电话

        self.d.watcher.when('//*[@resource-id="com.android.packageinstaller:id/permission_allow_button"]').click()

                # 发现滑动查看更多

        self.d.watcher.when('//*[@text="滑动查看更多"]').click()

        # 添加一个监控器

        self.d.watcher.when('//*[@text="快速进入TA的个人中心"]').click()

        # 监控器写好之后,一定要记得启动

        self.d.watcher.start(interval=1)


    def get_windowsize(self):

        """获取窗口大小"""

        return self.d.window_size()


    def click_user(self):

        self.d.click(0.409, 0.31)

        self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()

        self.d.click(0.412, 0.488)

        self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()

        self.d.click(0.425, 0.664)

        self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()

        self.d.click(0.384, 0.841)

        self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()

        if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20): 

            # and self.d(resourceId="com.ss.android.ugc.aweme:id/u0").exists:

            # 进入正常的视频页面,开始滑动

            x1 = int(self.size[0] * 0.462)

            y1 = int(self.size[1] * 0.84)

            y2 = int(self.size[1] * 0.166)

            self.d.swipe(x1, y1, x1, y2)


    def swipe_douyin(self):

        """滑动抖音视频和点击视频发布者头像的操作"""

        # 来判断是否正常的进入到了视频页面

        # 网络情况不好也包含在内了

        if self.d(resourceId="com.ss.android.ugc.aweme:id/a05", text="发现").exists(timeout=20):

            self.d(text="发现").click()

            self.d.click(0.365, 0.084)


        if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):

            self.d(resourceId="com.ss.android.ugc.aweme:id/gg").set_text("欧莱雅")

            self.d(text="搜索").click()


        if self.d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):

            while True:

                # 到规定的时间停止循环

                if self.stop_time():

                    self.stop_app()

                    return

                if d(resourceId="com.ss.android.ugc.aweme:id/et").exists(timeout=20):

                    self.click_user()






if __name__ == '__main__':

    d = Douyin()

    d.swipe_douyin()



0
0

移动端Python爬虫实战 数据抓取+数据可视化

从App数据抓取到数据可视化,全流程讲解

1831 学习 · 1003 问题

查看课程