zoukankan      html  css  js  c++  java
  • 表格、恢复出厂、正则

    import os
    import re
    import subprocess
    import sys
    
    import uiautomator2 as u2
    import time
    
    from pandas.tests.io.excel.test_xlrd import xlrd, xlwt
    from xlutils.copy import copy
    
    
    def set_up():
        d = u2.connect(device)
        time.sleep(1)
        d.screen_on()
        d.shell('input keyevent 82')
        d.shell('input keyevent 3')
    
    
    def exists(path):
        is_exists = os.path.exists(path)
        if is_exists:
            return True
        else:
            os.mkdir(path)
    
    
    # 创建结果文件夹
    def create_xls(xls_name):
        # 结果文件夹
        exists(os.path.join(os.getcwd(), 'Result'))
        result_dir = os.path.join(os.getcwd(), 'Result')
        # print(result_dir)
        # 判断目标结果excel文件是否存在,若无创建新文件
        result_path = os.path.join(result_dir, xls_name)
        if not os.path.exists(result_path):
            # 创建xls表格
            workbook = xlwt.Workbook(encoding='utf-8')
            # 创建一个worksheet
            worksheet = workbook.add_sheet('result')
            worksheet.col(0).width = 40 * 300  # Set the column width
            worksheet.col(1).width = 40 * 200  # Set the column width
            worksheet.col(2).width = 40 * 200  # Set the column width
            worksheet.col(3).width = 40 * 200  # Set the column width
            # 写入excel
            # 参数对应 行, 列, 值
            worksheet.write(0, 0, 'country')
            worksheet.write(0, 1, 'camera_info')
            worksheet.write(0, 2, 'storage_used')
            worksheet.write(0, 3, 'result')
            # worksheet.write(0, 3, 'rate')
            workbook.save(result_path)
        else:
            pass
        return result_path
    
    
    def write_excel_xls_append(path, country=[], camera_info=[], storage_used=[], result=[]):
        global worksheet
        workbook = xlrd.open_workbook(path, formatting_info=True)
        try:
            worksheet = workbook.sheet_by_name('result')
        except:
            print('xls文件sheet名称错误,默认名称是result,请检查')
        # 在写入之前需要获取已经写入的行数
        old_nrows = worksheet.nrows
        # print(old_nrows)
        new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
        new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格
        # 开始进行写操作
        new_worksheet.write(old_nrows + 1, 0, country)
        new_worksheet.write(old_nrows + 1, 1, camera_info)
        new_worksheet.write(old_nrows + 1, 2, storage_used)
        new_worksheet.write(old_nrows + 1, 3, result)
        new_workbook.save(path)
    
    
    # 到设置里面的平板信息
    def open_to_the_camera():
        for i in range(5):
            d.app_start('com.android.settings')
            time.sleep(1)
            if d(resourceId='android:id/button2').wait(timeout=3):
                d(resourceId='android:id/button2').click()
            time.sleep(4)
            d(scrollable=True).fling.toEnd()
            time.sleep(1)
            d.dump_hierarchy()
            try:
                d.xpath(
                    '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                    '9]/android.widget.ImageView[1]').click()
                time.sleep(1)
                d.xpath(
                    '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                    '1]/android.widget.LinearLayout[1]/android.widget.ImageView[1]').click()
                time.sleep(4)
                d(scrollable=True).fling.toEnd()
                time.sleep(1)
                break
            except:
                print('未能找到设置里面System的xpath,再次执行该操作')
                continue
    
    
    # 到设置里面的存储界面
    def open_to_the_storage():
        os.system('adb -s %s shell input keyevent 82' % device)
        os.system('adb -s %s shell input keyevent 82' % device)
        for i in range(5):
            try:
                d.app_start('com.android.settings')
                time.sleep(4)
                d(scrollable=True).fling.toEnd()
                time.sleep(1)
                d.dump_hierarchy()
                d.xpath(
                    '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                    '7]/android.widget.ImageView[1]').click()
                time.sleep(2)
                break
            except:
                print('未能找到设置里面Storage的xpath,再次执行该操作')
                continue
    
    
    # 获取camera里面的信息并判断
    def camera_text():
        d.dump_hierarchy()
        for i in range(5):
            for j in range(5):
                if not d.xpath('//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                               '9]/android.widget.RelativeLayout[1]/android.widget.TextView[2]').exists:
                    time.sleep(2)
                else:
                    break
            try:
                for i in d.xpath(
                        '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                        '9]/android.widget.RelativeLayout[1]/android.widget.TextView[2]').all():
                    text = i.text
                    print(text)
                    # 正则表达式 排除里面没有特殊字符+- 只有8和5
                    result_1 = re.findall('[+,-,=,*,#,@,!,$,%,^,~,(,),`]', text)
                    if len(result_1) != 0:
                        print('有特殊字符')
                        result = 'False'
                        return text, result
                    else:
                        result = re.findall(
                            '([+,-,=,*,#,@,!,$,%,^,~,(,),.`,/]*d+[+,-,=,*,#,@,!,$,%,^,~,(,),.`,/]*)+',
                            text)
                        print('Camera_text', result)
                        if len(result) != 2:
                            print("数字不是默认的2个数字")
                            result = 'False'
                            return text, result
                        for i in range(len(result)):
                            if '8' != result[i] and '13' != result[i]:
                                # print('Camera_text', result)
                                print("数字不是默认值")
                                result = 'False'
                                return text, result
                            else:
                                result = "True"
                                return text, result
            except:
                print('读取Camera信息失败,再次操作')
                continue
    
    
    # 获取stroage里面的信息并判断
    def storage_text():
        for i in range(5):
            try:
                d.dump_hierarchy()
                for i in range(10):
                    if d.xpath('//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                               '1]/android.widget.LinearLayout[1]/android.widget.TextView[1]').exists:
                        break
                    else:
                        time.sleep(2)
                for i in d.xpath(
                        '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                        '1]/android.widget.LinearLayout[1]/android.widget.TextView[1]').all():
                    text_use = i.text
                    print('已经使用', text_use)
                for i in d.xpath(
                        '//*[@resource-id="com.android.settings:id/recycler_view"]/android.widget.LinearLayout['
                        '1]/android.widget.LinearLayout[1]/android.widget.TextView[2]').all():
                    text = i.text
                    print('内存', text)
                    shuzi = re.findall('d+', str(text))
                    # print(shuzi)
                    result = ""
                    if "64" in shuzi:
                        info = d.xpath(
                            '//*[@resource-id="com.android.settings:id/donut"]').info
                        result_use = info["contentDescription"]
                        print(result_use)
                        # print(result_use)
                        if '31' not in result_use:
                            print('存储空间使用不是默认的值31%')
                            result = "False"
                        else:
                            result = "True"
                    elif "128" in shuzi:
                        info = d.xpath(
                            '//*[@resource-id="com.android.settings:id/donut"]').info
                        # print(info)
                        result_use = info["contentDescription"]
                        print(result_use)
                        if '16' not in result_use:
                            print('存储空间使用不是默认的值16%')
                            result = "False"
                        else:
                            result = "True"
                    else:
                        info = d.xpath(
                            '//*[@resource-id="com.android.settings:id/donut"]').info
                        info = dict(info)
                        result_use = info["contentDescription"]
                        print(result_use)
                        # 阿拉伯语无法数字判断 默认都false
                        # result_use = re.findall('w[\%]+', str(info))
                        # result_use = "".join(result_use).encode("gbk", 'ignore').decode("gbk", "ignore")
                        result = "False"
                        # print('阿拉博语言存储空间:', info["contentDescription"])
                        # if '16%' and '31%' not in result_use:
                        #     print(result_use, '存储空间使用不是默认的值16%/31%')
                    result_use = ''.join(str(s) for s in result_use)
                    return result_use, result
            except:
                print('读取storage信息失败')
                continue
    
    
    # 进入工厂模式
    def enter_factory():
        d = u2.connect(device)
        os.system('adb -s %s shell input keyevent 82' % device)
        os.system('adb -s %s shell input keyevent 82' % device)
        for i in range(5):
            try:
                d.app_start('com.android.settings')
                time.sleep(4)
                d.xpath(
                    '//*[@resource-id="android:id/action_bar"]/android.widget.LinearLayout[1]/android.widget.TextView').click()
                time.sleep(2)
                d.send_keys('####6030#')
                for i in range(5):
                    if d(text='AE United Arab Emirates').exists:
                        time.sleep(1)
                        break
                    else:
                        time.sleep(2)
                break
            except:
                print('进入工厂模式失败')
                continue
    
    
    # 切换国家码
    def change_code_list(start, end):
        d.dump_hierarchy()
        if d(className='android.widget.RadioButton', index=start).exists and d(className='android.widget.RadioButton',
                                                                               index=end).exists:
            d(className='android.widget.RadioButton', index=start).click()
            country = d(className='android.widget.RadioButton', index=start).info["text"]
            time.sleep(1)
            if d(resourceId='com.lenovo.EngineeringCode:id/ok').exists:
                d(resourceId='com.lenovo.EngineeringCode:id/ok').click()
            time.sleep(1)
            if d(resourceId='android:id/button1').wait(timeout=2):
                d(resourceId='android:id/button1').click()
            time.sleep(260)
            for i in range(5):
                try:
                    # 等待恢复出厂设置
                    os.system("adb -s %s root" % device)
                    os.system("adb -s %s remount" % device)
                    os.system("adb -s %s shell settings put secure user_setup_complete 1" % device)
                    os.system("adb -s %s shell settings put global device_provisioned 1" % device)
                    os.system("adb -s %s reboot" % device)
                    time.sleep(85)  # 重启
                    os.system('adb -s %s shell input keyevent 82' % device)
                    os.system('adb -s %s shell input keyevent 82' % device)
                    os.system('adb -s %s shell input keyevent 82' % device)
                    os.system('adb -s %s shell input keyevent 82' % device)
                    os.system('adb -s %s shell settings put system screen_off_timeout 600000' % device)
                    os.system('adb -s %s shell settings put system screen_off_timeout 600000' % device)
                    os.system('adb -s %s shell input keyevent 3' % device)
                    os.system('adb -s %s shell input keyevent 3' % device)
                    set_up()
                    break
                except:
                    print('开机失败重新再次尝试')
                    continue
            print(country)
            main()
            try:
                write_excel_xls_append(path=result_path, country=country, camera_info=camera_info,
                                       storage_used=storage_used, result=result)
            except:
                print('请勿在执行过程中打开结果文件')
    
    
    def main():
        global camera_info, storage_used, result
        open_to_the_camera()
        time.sleep(2)
        result_1 = camera_text()
        time.sleep(2)
        open_to_the_storage()
        time.sleep(4)
        result_2 = storage_text()
        result_3 = result_1 + result_2
        # print(result_3)
        # print(result_3)
        # 结果默认为True 有一个错误即为错
        result = "True"
        for i in range(len(result_3)):
            if "False" in result_3[i]:
                result = "False"
            elif "/" in result_3[i]:
                camera_info = result_3[i]
            elif "%" in result_3[i]:
                storage_used = result_3[i]
        # 排除没有百分比的特殊情况
        if "%" not in result_2:
            storage_used = result_2
            # print(storage_used)
            for m in range(len(storage_used)):
                if storage_used[m] != 'True' and storage_used[m] != 'False':
                    storage_used = storage_used[m]
                    break
        # 排除没有/ 的情况
        if "/" not in result_1:
            camera_info = result_1
            # print(camera_info)
            for m in range(len(camera_info)):
                if camera_info[m] != 'True' and camera_info[m] != 'False':
                    camera_info = camera_info[m]
                    # print(camera_info)
                    break
        return camera_info, storage_used, result
    
    
    # 选择设备的id
    def device_input():
        device_id = input('请输入需要进行操作的设备id:')
        return device_id
    
    
    if __name__ == '__main__':
        result_path = create_xls("CheckInDifferentCountry.xls")
        device = device_input()
        d = u2.connect(device)
        time.sleep(1)
        code_1 = 1
        code_2 = 15
        code_3 = 30
        code_4 = 45
        code_5 = 59
        # AR -> EC Ecuador
        for i in range(14):
            enter_factory()
            while True:
                if d(text='AE United Arab Emirates').exists and d(text='EC Ecuador').exists:
                    if code_1 < 15:
                        change_code_list(code_1, 15)
                        code_1 += 1
                    break
                else:
                    os.system('adb -s %s shell input swipe 798 327 781 248' % device)
        print('第一页国家码结束')
        #  EE -> IT Italy
        for i in range(14):
            enter_factory()
            while True:
                if d(text='EC Ecuador').exists and d(text='IT Italy').exists:
                    if code_2 < 30:
                        change_code_list(code_2, 30)
                        code_2 += 1
                    break
                else:
                    os.system('adb -s %s shell input swipe 798 327 781 248' % device)
        print('第二页国家码结束')
        # Japan -> PT Portugal
        for i in range(14):
            enter_factory()
            while True:
                if d(text='IT Italy').exists and d(text='PT Portugal').exists:
                    if code_3 < 45:
                        change_code_list(code_3, 45)
                        code_3 += 1
                    break
                else:
                    os.system('adb -s %s shell input swipe 798 327 781 248' % device)
        print('第三页国家码结束')
        #  RO Romanial-> US United States of America
        for i in range(14):
            enter_factory()
            while True:  # ZA South Africa
                if d(text='PT Portugal').exists and d(text='US United States of America').exists:
                    if code_4 < 60:
                        change_code_list(code_4, 60)
                        code_4 += 1
                    break
                else:
                    os.system('adb -s %s shell input swipe 798 327 781 248' % device)
        # 点击最后二个国家码
        for i in range(2):
            enter_factory()
            while True:
                if d(text='ZA South Africa').exists and d(text='VN Vietnam').exists:
                    change_code_list(code_5, 61)
                    code_5 += 1
                    break
                else:
                    os.system('adb -s %s shell input swipe 798 327 781 248' % device)
        # 点击第一个阿拉伯
        enter_factory()
        if d(text='AE United Arab Emirates').exists:
            change_code_list(0, 60)
        print('第四页国家码结束')
  • 相关阅读:
    [整机笔记][转贴]硬盘无法双击打开的解决办法
    [网络随摘][转载]值得用一生回味的经典语录
    [网络随摘][转载]如果你已经过了20还不到25岁
    [网络随摘][转摘]只有十句话,我却看了十分钟
    实现百台手机异步并发定时自动GPS定位打卡,基于python全天后定时签到稳定版。
    【FireFox】在Firefox中,关于隐藏table中某一行tr,其他td的边框显示异常
    【记】屏蔽浏览器shift+鼠标滚轴事件
    【记】Javascript的函数直接量定义
    【Javascript】Javascript中的函数调用模式
    【记】three.js的一个简单的代码记录
  • 原文地址:https://www.cnblogs.com/blackpink/p/14607245.html
Copyright © 2011-2022 走看看