|
@@ -0,0 +1,224 @@
|
|
|
|
+# -*- 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()
|
|
|
|
+'''
|