# -*- codeing = utf-8 -*- # @Time : 2022/9/29 16:17 # @Author : Clown # @File : appium_mitmproxy_demo.py # @Software : PyCharm import mitmproxy import csv import pandas import appium from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from appium.webdriver.common.touch_action import TouchAction import time import random def getSize(driver): """获取页面大小""" x = driver.get_window_size()['width'] y = driver.get_window_size()['height'] return(x, y) def swipeRight(driver): """向右滑动 - [x轴变动,y轴不变]""" l = getSize(driver) x1 = int(l[0] * 0.8) x2 = int(l[0] * 0.2) y = int(l[1] * 0.5) driver.swipe(x1, y, x2, y, 1000) def swipeLeft(driver): """向左滑动 - [x轴变动,y轴不变]""" l = getSize(driver) x1 = int(l[0] * 0.9) x2 = int(l[0] * 0.1) y = int(l[1] * 0.5) driver.swipe(x2, y, x1, y, 1000) def swipeDown(driver,y1): """向下滑动 - [x轴不变,y轴变动]""" l = getSize(driver) # y1 = int(l[1] * 0.5) # y2 = int(l[1] * 0.2) y2 = y1 - 630 x_v = random.uniform(0.45,0.55) x = int(l[0] * (x_v)) # 329 --348 x1 = int(l[0] * (x_v)) # driver.swipe(x, y1, x1, y2) driver.swipe(x, y1, x1, y2) # time.sleep(random.uniform(0.5,1)) def swipeUp(driver): """向上滑动 - [x轴不变,y轴变动]""" l = getSize(driver) y1 = int(l[1] * 0.9) y2 = int(l[1] * 0.2) x = int(l[0] * 0.5) driver.swipe(x, y2, x, y1, 1000) #计算器 appPackage = 'com.oneplus.calculator' appActivity = 'com.oneplus.calculator.Calculator' #美团 appPackage = 'com.sankuai.meituan' appActivity = 'com.meituan.android.pt.homepage.activity.MainActivity' # #美团外卖 # appPackage = 'com.sankuai.meituan.takeoutnew' # appActivity = 'com.sankuai.waimai.business.page.homepage.MainActivity' addr = '徐汇区石龙路853号' city = '上海' app_dict = { "platformName": "Android", "platformVersion": '10.0.11', "automationName": "uiautomator2", "deviceName": '4b324dc1', "appPackage": appPackage, "appActivity": appActivity, "unicodeKeyboard": True, "resetKeyboard": True, "newCommandTimeout": 6000, "noReset": True } ''' "platformName": "Android", # 系统环境 "platformVersion": xxxx, #测试手机android版本 "automationName": "uiautomator2", #自动化名称 "deviceName": xxxxx, #设备名称 设备名称查看方式:win + r 输入cmd 使用adb命令【adb devices】获取 "appPackage": xxxx, # 程序包名 程序包名查看方式:win + r 输入cmd 使用adb命令【adb shell "dumpsys window | grep mCurrent】(不要按回车),然后操作安卓设备清除所有在运行的app,打开需自动执行的app,在cmd界面按回车执行命令 # 程序包名的操作对应输出的内容如:[ # mCurrentUserId=0 # mCurrentFocus=Window{408742e u0 com.oneplus.calculator/com.oneplus.calculator.Calculator} 【com.oneplus.calculator】为包名,【com.oneplus.calculator.Calculator】为程序入口名 # mCurrent=[0,80][1080,2280] # mCurrentAppOrientation=SCREEN_ORIENTATION_UNSPECIFIED # mCurrentRotation=ROTATION_0] "appActivity": "xxxx, #程序入口类名 "unicodeKeyboard": True, #使用自带输入法,输入中文时填True "resetKeyboard": True, #执行程序恢复原来输入法 "newCommandTimeout": 6000, "noReset": true #保存session状态,不重置app ''' driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',app_dict) driver.update_settings({'waitForIdleTimeout': 100}) # 设置缺省等待时间 driver.implicitly_wait(10) # driver.find_element_by_accessibility_id('外卖').click() driver.find_element(AppiumBy.ACCESSIBILITY_ID,'外卖').click() try: # driver.find_element_by_accessibility_id('关闭').click() driver.find_element (AppiumBy.ACCESSIBILITY_ID, '关闭').click () except: pass # driver.find_element_by_accessibility_id('全部分类').click() # driver.find_element_by_accessibility_id('com.sankuai.meituan:id/actionbar_txt').click() #点击顶部 定位 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.TextView').click() #点击收货地址搜索 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.EditText').click() #点击城市定位 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.TextView[2]').click() #点击城市搜索框并输入城市关键词 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.EditText').click() driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.EditText').send_keys(city) #选择首个匹配的城市 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup[3]/android.view.ViewGroup[1]/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup[2]/android.widget.TextView').click() #点击收货地址搜索并输入具体地址 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.EditText').click() driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.EditText').send_keys(addr) #选择首个匹配的地址 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.LinearLayout').click() #选择美食 try: # driver.find_element_by_accessibility_id('美食').click() driver.find_element (AppiumBy.ACCESSIBILITY_ID, '美食').click () except: driver.find_element(AppiumBy.XPATH,'//android.widget.RelativeLayout[@content-desc="美食"]').click() #点击综合排序 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView').click() #点击距离优先 driver.find_element(AppiumBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.ListView/android.widget.RelativeLayout[3]').click() long = 0 page = 1 while long <= 2: print(f'-------{page}页--------') y_p = 2044 for n in range(1,8): try: # n = 2 main_path = f'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[{n}]' #'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout/android.support.v4.view.ViewPager/android.widget.FrameLayout/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[2] fix_path = '/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]' title = main_path + fix_path + '/android.widget.FrameLayout[1]/android.widget.TextView' mark = main_path + fix_path + '/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView' month_order = main_path + fix_path + '/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.TextView[1]' per_pp = main_path + fix_path + '/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.TextView[2]' qisongfei = main_path + fix_path + '/android.widget.FrameLayout[3]/android.widget.FrameLayout/android.widget.TextView[1]' peisongfei = main_path + fix_path + '/android.widget.FrameLayout[3]/android.widget.FrameLayout/android.widget.TextView[2]' peisongTime = main_path + fix_path + '/android.widget.FrameLayout[3]/android.widget.TextView[1]' peisongDistent = main_path + fix_path + '/android.widget.FrameLayout[3]/android.widget.TextView[2]' tips = main_path + fix_path + '/android.widget.FrameLayout[4]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TextView' title1 = driver.find_element(AppiumBy.XPATH,title).text peisongDistent1 = driver.find_element(AppiumBy.XPATH,peisongDistent).text if n == 6: img = main_path elem = driver.find_element(AppiumBy.XPATH,tips) height = elem.size['height'] y_p = elem.location['y'] + height except: title1 = '未知' peisongDistent1 = '未知' print('序号',n,'店名:',title1,'配送距离:',peisongDistent1,'Y轴:',y_p) try: long = int(peisongDistent1.split('.')[0]) except: long = 0 swipeDown(driver,y_p) page += 1 ''' import frida import sys def on_message(message, data): if message['type'] == 'send': print("[*] {0}".format(message['payload'])) else: print(message) hookcode = """ Java.perform(function () { var SwitchConfig = Java.use('mtopsdk.mtop.global.SwitchConfig') SwitchConfig.isGlobalSpdySwitchOpen.implementation = function () { return false; } }); """ process = frida.get_usb_device().attach('com.taobao.taobao') script = process.create_script(hookcode) script.on('message', on_message) script.load() sys.stdin.read() '''