123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- # -*- 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()
- '''
|