技术心得
python+appium+夜神模拟器+结合yaml配置文件实现并发采集任务。
代码如下:
import subprocess from os import system from appium import webdriver import time import yaml import os from selenium.webdriver.support.wait import WebDriverWait from base.base_root import BaseRoot class BaseDriver(object): def __init__(self, device_info): self.device_info = device_info def release_port(self,port): """释放指定的端口""" cmd_find = 'netstat -aon | findstr {}'.format(port) # 查找对应端口的pid # 返回命令执行后的结果 result = os.popen(cmd_find).read() if str(port) and 'LISTENING' in result: # 获取端口对应的pid进程 i = result.index('LISTENING') start = i + len('LISTENING') + 7 end = result.index('\n') pid = result[start:end] cmd_kill = 'taskkill -f -pid %s' % pid # 关闭被占用端口的pid os.popen(cmd_kill) print(f'释放进程端口:{port}') else: print('port %s is available !' % port) def restart_start_appium(self, port=4723, udid=""): print('netstat -ano | findstr "%s" ' % port) a = os.popen('netstat -ano | findstr "%s" ' % port) time.sleep(2) t1 = a.read() if "LISTENING" in t1: self.release_port(port) # 启动appium服务 print("appium -p %s -bp %s -U %s --no-reset --session-override" % (port, port, udid)) #os.system("appium -p %s -bp %s -U %s --no-reset --session-override" % (port, port, udid)) bootstrap_port = port host = '127.0.0.1' # cmd命令 cmd = 'start /b appium -a ' + host + ' -p ' + str(port) + ' -bp ' + str(bootstrap_port)+' -U '+ str(udid)+' --no-reset --session-override ' print("%s at %s " % (cmd, time.ctime())) # cmd 需要执行的shell命令 showtime = time.strftime('%Y-%m-%d',time.localtime(time.time())) curpath = BaseRoot.root_path folder = f"/log/appium_log_{showtime}/" if not os.path.exists(curpath + f'/{folder}/'): os.makedirs(curpath + f'/{folder}/') #showtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) showtime = time.strftime('%Y-%m-%d-%H',time.localtime(time.time())) subprocess.Popen(cmd, shell=True,stdout=open(curpath + f'/{folder}/' + f'{port}.log', 'w', encoding='utf8'),stderr=subprocess.STDOUT) #subprocess.Popen(cmd, shell=True) time.sleep(1) def start_appium(self, port=4723, udid=""): print('netstat -ano | findstr "%s" ' % port) a = os.popen('netstat -ano | findstr "%s" ' % port) time.sleep(2) t1 = a.read() if "LISTENING" in t1: print("appium服务已经启动:%s" % t1) else: # 启动appium服务 print("appium -p %s -bp %s -U %s --no-reset --session-override" % (port, port, udid)) #os.system("appium -p %s -bp %s -U %s --no-reset --session-override" % (port, port, udid)) bootstrap_port = port host = '127.0.0.1' # cmd命令 cmd = 'start /b appium -a ' + host + ' -p ' + str(port) + ' -bp ' + str(bootstrap_port)+' -U '+ str(udid)+' --no-reset --session-override ' print("%s at %s " % (cmd, time.ctime())) # cmd 需要执行的shell命令 showtime = time.strftime('%Y-%m-%d',time.localtime(time.time())) curpath = os.path.dirname(os.path.realpath(__file__)) folder = f"{curpath}/appium_log_{showtime}" if not os.path.exists(folder): os.makedirs(folder) #showtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) showtime = time.strftime('%Y-%m-%d-%H',time.localtime(time.time())) subprocess.Popen(cmd, shell=True,stdout=open(curpath + f'/appium_log/' + f'{port}.log', 'w', encoding='utf8'),stderr=subprocess.STDOUT) #subprocess.Popen(cmd, shell=True) time.sleep(1) def get_desired_caps(self, devicesName='62001'): ''' 从yaml读取desired_caps配置信息 参数name:设备名称,如:夜神/雷电 :return: desired_caps字典格式 ''' curpath = os.path.dirname(os.path.realpath(__file__)) yamlpath = os.path.join(curpath, "ddmc.yaml") print("配置地址:%s" % yamlpath) f = open(yamlpath, "r", encoding="utf-8") a = f.read() f.close() # 把yaml文件转字典 d = yaml.load(a, Loader=yaml.FullLoader) for i in d: if devicesName in i["desc"]: #print(i) # 启动服务 #devicesName = i['desired_caps']['udid'] connect_devicesName = f"127.0.0.1:{devicesName}" if i['desired_caps']['zhenji'] == 1: connect_devicesName = i['desired_caps']['udid'] print("连接设备:%s" %connect_devicesName) if i['desired_caps']['zhenji'] == 0: i['port'] = int(devicesName)-20000 i['desired_caps']['udid'] =connect_devicesName i['desired_caps']['deviceName'] =connect_devicesName self.restart_start_appium(port=i['port'], udid=connect_devicesName) return (i['desired_caps'], i['port']) def get_base_driver(self) -> (webdriver,dict): """获取driver""" # 配置参数 print("准备启动连接: "+self.device_info) desired_caps = self.get_desired_caps(self.device_info) root_path = BaseRoot.root_path root_path = root_path.replace('\\','/') # 设置谷歌驱动地址 if desired_caps[0]['zhenji'] == 1: chromedriverpath = root_path + 'vendor/'+desired_caps[0]['chromedriverpath'] else: chromedriverpath = root_path + 'vendor/chromedriver_win32_v92.0.4515.43.exe' #chromedriverpath = os.getcwd().replace('\\','/')+'/chromedriver_win32_v92.0.4515.43.exe' desired_caps[0]['chromedriverExecutable'] = chromedriverpath desired_caps[0]['chromeOptions'] = {'androidProcess': 'com.tencent.mm:appbrand0'} self.driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0]) print("启动微信应用程序1") '''' self.driver.press_keycode(3) time.sleep(19) self.driver = webdriver.Remote('http://127.0.0.1:%s/wd/hub' % desired_caps[1], desired_caps[0]) print("启动微信应用程序1") ''' system(f"title {self.device_info}") time.sleep(3) self.wait = WebDriverWait(self.driver, 300) return (self.driver,desired_caps[0]) if __name__ == '__main__': BaseDriver("夜神62001").get_base_driver()
模拟器的配置文件如下:
- desc: 设备名称_夜神62001,appium启动服务端口号_42009 port: 42009 desired_caps: platformName: Android deviceName: FA79F1A08850 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True udid: FA79F1A08850 platformVersion: 9.1.2 chromedriverpath: chromedriver_win32_v107.0.5304.62.exe zhenji: 1 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62025,appium启动服务端口号_42025 port: 42025 desired_caps: platformName: Android deviceName: 127.0.0.1:62025 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62025 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62026,appium启动服务端口号_42026 port: 42026 desired_caps: platformName: Android deviceName: 127.0.0.1:62026 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62026 platformVersion: 12.0.0 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62027,appium启动服务端口号_42027 port: 42027 desired_caps: platformName: Android deviceName: 127.0.0.1:62027 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62027 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62028,appium启动服务端口号_42028 port: 42028 desired_caps: platformName: Android deviceName: 127.0.0.1:62028 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62028 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62029,appium启动服务端口号_42029 port: 42029 desired_caps: platformName: Android deviceName: 127.0.0.1:62029 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62029 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62030,appium启动服务端口号_42030 port: 42030 desired_caps: platformName: Android deviceName: 127.0.0.1:62030 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62030 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62031,appium启动服务端口号_42031 port: 42031 desired_caps: platformName: Android deviceName: 127.0.0.1:62031 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62031 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62032,appium启动服务端口号_42032 port: 42032 desired_caps: platformName: Android deviceName: 127.0.0.1:62032 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62032 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62033,appium启动服务端口号_42033 port: 42033 desired_caps: platformName: Android deviceName: 127.0.0.1:62033 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62033 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62034,appium启动服务端口号_42034 port: 42034 desired_caps: platformName: Android deviceName: 127.0.0.1:62034 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62034 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62035,appium启动服务端口号_42035 port: 42035 desired_caps: platformName: Android deviceName: 127.0.0.1:62035 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62035 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62036,appium启动服务端口号_42036 port: 42036 desired_caps: platformName: Android deviceName: 127.0.0.1:62036 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62036 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62037,appium启动服务端口号_42037 port: 42037 desired_caps: platformName: Android deviceName: 127.0.0.1:62037 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62037 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62038,appium启动服务端口号_42038 port: 42038 desired_caps: platformName: Android deviceName: 127.0.0.1:62038 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62038 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62039,appium启动服务端口号_42039 port: 42039 desired_caps: platformName: Android deviceName: 127.0.0.1:62039 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62039 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62040,appium启动服务端口号_42040 port: 42040 desired_caps: platformName: Android deviceName: 127.0.0.1:62040 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62040 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62041,appium启动服务端口号_42041 port: 42041 desired_caps: platformName: Android deviceName: 127.0.0.1:62041 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62041 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62042,appium启动服务端口号_42042 port: 42042 desired_caps: platformName: Android deviceName: 127.0.0.1:62042 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62042 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62043,appium启动服务端口号_42043 port: 42043 desired_caps: platformName: Android deviceName: 127.0.0.1:62043 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62043 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62044,appium启动服务端口号_42044 port: 42044 desired_caps: platformName: Android deviceName: 127.0.0.1:62044 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62044 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62045,appium启动服务端口号_42045 port: 42045 desired_caps: platformName: Android deviceName: 127.0.0.1:62045 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62045 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62046,appium启动服务端口号_42046 port: 42046 desired_caps: platformName: Android deviceName: 127.0.0.1:62046 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62046 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62047,appium启动服务端口号_42047 port: 42047 desired_caps: platformName: Android deviceName: 127.0.0.1:62047 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62047 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62048,appium启动服务端口号_42048 port: 42048 desired_caps: platformName: Android deviceName: 127.0.0.1:62048 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62048 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62049,appium启动服务端口号_42049 port: 42049 desired_caps: platformName: Android deviceName: 127.0.0.1:62049 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62049 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62050,appium启动服务端口号_42050 port: 42050 desired_caps: platformName: Android deviceName: 127.0.0.1:62050 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62050 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62051,appium启动服务端口号_42051 port: 42051 desired_caps: platformName: Android deviceName: 127.0.0.1:62051 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62051 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62052,appium启动服务端口号_42052 port: 42052 desired_caps: platformName: Android deviceName: 127.0.0.1:62052 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62052 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62053,appium启动服务端口号_42053 port: 42053 desired_caps: platformName: Android deviceName: 127.0.0.1:62053 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62053 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62054,appium启动服务端口号_42054 port: 42054 desired_caps: platformName: Android deviceName: 127.0.0.1:62054 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62054 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62055,appium启动服务端口号_42055 port: 42055 desired_caps: platformName: Android deviceName: 127.0.0.1:62055 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62055 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62056,appium启动服务端口号_42056 port: 42056 desired_caps: platformName: Android deviceName: 127.0.0.1:62056 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62056 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62057,appium启动服务端口号_42057 port: 42057 desired_caps: platformName: Android deviceName: 127.0.0.1:62057 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62057 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62058,appium启动服务端口号_42058 port: 42058 desired_caps: platformName: Android deviceName: 127.0.0.1:62058 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62058 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62059,appium启动服务端口号_42059 port: 42059 desired_caps: platformName: Android deviceName: 127.0.0.1:62059 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62059 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI - desc: 设备名称_夜神62060,appium启动服务端口号_42060 port: 42060 desired_caps: platformName: Android deviceName: 127.0.0.1:62060 unicodeKeyboard: !!bool True resetKeyboard: !!bool True noReset: !!bool True newCommandTimeout: 6000 udid: 127.0.0.1:62060 platformVersion: 7.1.2 chromedriverpath: chromedriver_win32_v92.0.4515.43.exe zhenji: 0 appPackage: com.tencent.mm appActivity: .ui.LauncherUI
欢迎大家一起学习,一起进步,喜欢私聊。