zoukankan      html  css  js  c++  java
  • xxxxxxxxxxxxxxxxxxx

    1.

    # -*- encoding=utf8 -*-
    __author__ = "1003441"
    
    from airtest.core.api import *
    
    auto_setup(__file__)
    # 日志模块
    from airtest.report.report import simple_report
    
    simple_report(__file__)
    # 连接设备,初始化界面ui
    dev = connect_device("Android://127.0.0.1:5037/127.0.0.1:21523")
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    
    poco = AndroidUiautomationPoco(dev, use_airtest_input=True, screenshot_each_action=False)
    
    
    def start_aikucun():
        """
        启动app并处理一些广告和弹窗提示
        每次运行之前都要把确保app是刚打开的页面
        :return:
        """
        stop_app("com.aikucun.akapp")
        start_app("com.aikucun.akapp")
        # 这边需要管理这些潜在的广告界面
        # 启动的时候可能存在一些广告页面
        # todo优化成等到首页的某个元素出现比较保险,不要用time.sleep()
        time.sleep(15)
        if poco(name='com.aikucun.akapp:id/dialog_image_show').exists():
            poco(name='com.aikucun.akapp:id/dialog_close').click()  # 关闭广告按钮
    
        elif poco(name='com.aikucun.akapp:id/notice_style_close').exists():
            poco(name='com.aikucun.akapp:id/notice_style_close').click()  # 确定按钮关闭 弹窗
    
    
    def get_detail():
        """
        详情页的滑动和品牌切换
        滑动获取数据,数据获取完,直接在当前页切换到下一个品牌,重复滑动操作
        :return:
        """
        global now_brand
        while True:
            poco.swipe([0.5, 0.85], [0.5, 0.2], duration=0.1)
            if poco(text='已加载完毕').exists():
                break
            time.sleep(0.5)
        # 切换品牌,这边要判断是否已经是最后几个品牌了
        poco(name='com.aikucun.akapp:id/tv_title').click()
        # 等待品牌列表弹出来(选择品牌标签)
        poco(name='com.aikucun.akapp:id/cancel_layout_tv').wait_for_appearance()
        # 保留当前的品牌名称
        now_brand = poco("android.widget.FrameLayout").offspring("com.aikucun.akapp:id/ll_dialog_indefinite") 
            .offspring("com.aikucun.akapp:id/recycleView").child("android.widget.LinearLayout") 
            [1].child("com.aikucun.akapp:id/brand_layout").child('com.aikucun.akapp:id/brand_name_tv').get_text()
        print('当前品牌是:%s' % now_brand)
    
        # 点击进入品牌
        poco("android.widget.FrameLayout").offspring("com.aikucun.akapp:id/ll_dialog_indefinite") 
            .offspring("com.aikucun.akapp:id/recycleView").child("android.widget.LinearLayout")[1].wait(6).click()
    
        # 切换品牌的时候,有的时候已进入品牌并不会有数据,保险的方法就是切换到一个新的品牌的时候都刷新一下页面
        time.sleep(0.5)
        poco.swipe([0.5, 0.4], [0.5, 0.95], duration=1)
        time.sleep(1)
        if poco(name='com.aikucun.akapp:id/headImage').exists():
            pass
        else:
            poco.swipe([0.5, 0.5], [0.5, 0.95], duration=3)
            time.sleep(1.5)
    
    
    def clear_and_restart():
        """
        定期关闭app在重启,清理内存 ,防止内存溢出
        重新启动爱库存,并搜索上一轮抓取的最后一个品牌
        :return:
        """
        print('抓了90个,重启一下app')
        stop_app('com.aikucun.akapp')
        #     poco(text='爱库存').wait_for_appearance()
        start_aikucun()
        poco(name='com.aikucun.akapp:id/btn_left').wait_for_appearance()
        poco(name='com.aikucun.akapp:id/btn_left').wait(10).click()
        poco(name='com.aikucun.akapp:id/search_live_et').wait_for_appearance()
        poco(name='com.aikucun.akapp:id/search_live_et').set_text(now_brand)
        # 搜索到品牌之后就点击进入品牌详情,重复上滑动作
        try:
            poco(name='com.aikucun.akapp:id/brand_name_tv').wait(10).click()
            get_detail()
        except Exception as e:
            clear_and_restart()
    
    
    def get_data():
        """
        点击品牌列表进入详情页并滑动详情页的所有数据
        :return:
        """
        poco(text='品牌').wait(15).click()
        # 获取当前时间点的品牌总数量,用来计数的
        brand_count = poco(name='com.aikucun.akapp:id/brand_count').get_text()
        brand_count = int(brand_count)
        print('当前时间共有%d个品牌' % brand_count)
    
        # 点击品牌列表的第一个品牌(入口),并且等待品牌列表出现 才继续下一步
        poco(name='com.aikucun.akapp:id/brand_name_tv').wait(15).click()
        count = 0
        while True:
            if count <= brand_count - 4:
                get_detail()
                count += 1
                print('第%d个品牌抓取完成' % count)
                # 定期清理一下内存,重新进入app,重复执行之前的动作
                if count % 50 == 0:
                    time.sleep(120)
                elif count % 90 == 0:
                    clear_and_restart()
            else:
                break
    
    
    def run():
        try:
            start_aikucun()
            get_data()
        except Exception as e:
            clear_and_restart()
    
    
    if __name__ == '__main__':
        run()
    
    # todo异常处理
    #     if poco(name='android:id/message',textMatches='^很抱歉,“爱库存”已停止运行。.*$').exists()
    #         poco(name='android:id/button1',textMatches='^确定.*$').click()

    2.

  • 相关阅读:
    文件下载
    Regularexpressionvalidator控件常用正则表达式
    确认删除
    回发或回调参数无效。
    回车提交表单
    具有身份验证的web.config
    OleDbParameter参数的使用
    把CS文件编译成dll文件
    .Net简单三层
    ASP.NET 2.0中的页面输出缓存
  • 原文地址:https://www.cnblogs.com/tjp40922/p/14753380.html
Copyright © 2011-2022 走看看