Недавно я проанализировал приложение и планировал автоматически создать несколько снимков экрана для подготовки материалов для собственного создания видео. Я обнаружил, что могу зафиксировать только несколько запросов на удаленные ссылки в исходном интерфейсе, но не другие. Вы когда-нибудь сталкивались с чем-то подобным? проблема?
Чтобы решить эту проблему, я работал как тигр, поэтому придумал эту статью. В этой статье в основном описывается весь процесс для справки.
Поскольку я использую эмулятор, вы знаете, что все эмуляторы на рынке предназначены для Android, поэтому вы также знаете, что вы используете приложения Android, установленные в эмуляторе. Моя цель — напрямую управлять приложением в симуляторе через Python для выполнения соответствующих операций. Если вы использовали selenium или puppeteer для моделирования запросов или автоматических тестов, вы, вероятно, должны понимать, о чем я говорю.
adb
контролировать ихПотому что эмулятор эквивалентен виртуальной машине Android.,Если вы использовали докер,adb
Это эквивалентноdocker-compose
инструмент,Может управлять контейнерами,Если вы использовалиk8s
,Такadb
Эквивалентноkube-apiserver
,Он может интерактивно управлять всеми контейнерами. Какое приложение необходимо установить в эмулятор?,Какие приложения есть в симуляторе?Activity
составляют,Они являются основой для последующих операций моделирования в приложении. Вот обзор процесса установки:
compiler
можно уточнить в любое время Версия Скачать。Разница в том, что в первом вы можете указать местоположение самостоятельно.,Что касается последнего, то вы можете не знать, куда его установить.。Затем в корневом каталоге.bash_profile
или.zshrc
Заявление в。 export JAVA_HOME=~/Library/Java/JavaVirtualMachines/openjdk-17.0.2/Contents/Home
android-studio
Редактор,После указания местоположения jdk,это будет напрямуюandriod-sdk
вплоть до~/Library/Android/sdk
в каталоге,Положение объявления такое же, как указано выше.//Объявлено в `.bash_profile` или `.zshrc` в корневом каталоге.
экспорт ANDROID_HOME=~/Library/Android/sdk
экспортировать PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
Специальные советы: Если вы используетеbrewУстановитьandriod-sdk,Обязательно одновременно установите инструменты Android-платформы.,Но установка с помощью команды Brew,Этих двух вещей нет в корневом каталоге SDK.,Как указано во всех туториалах в Интернете, настроен только ANDRIOD_HOME.,Непоследовательно указывать инструменты и инструменты платформы, находящиеся под его юрисдикцией, в переменных среды, чтобы сделать их доступными.,так Я все еще строю то, что сказалиспользоватьandriod-studioспособ Установить。иитак Установитьизandriod-sdk,иметьэтовплоть до ПонятноCellar
в каталоге,иметьэтовплоть до ПонятноCaskhome
в каталоге,В общем, очень запутанно.
Конечно, если вы определенно хотите использовать этот метод, вот несколько команд, которые, я надеюсь, будут вам полезны.
brew install --cask andriod-sdk
brew install --cask android-platform-tools
brew list android-sdk //Просмотр конкретного каталога установки
финальный Если вы используете Заказadb
В окне командной строки введите,Есть командная строка для сипользовать,Это означает, что установка прошла успешно,Если ваш эмулятор уже запущен,доступныйadb devices
Проверятьиметькакие из них работаютизAndroid-сервисы
Если вы используете слишком много инструментов сканирования,Возможно, вы столкнулись с различными проблемами. Позвольте мне привести несколько примеров,Например, зарубежный сайт, который я захватил,Структура сайта на самом деле довольно проста.,Использовалdrupal
,Но основное его содержание,Вам придется вручную опустить форму,Только после этого можно будет загрузить вторую половину контента.,Я использую что-то вроде этогоscrapy
Просто положитесь наdom
Анализ узловxpath
или ВОЗre
Трудно уловить весь контент при сопоставлении,В это время,Мы можем полагаться только на симуляцию действий человека.или ВОЗheadlessБраузер。И всотовый Имитация операции захвата телефонных пакетов больше не является необязательной, а стала обязательной опцией. То есть необходимо имитировать действия человека, чтобы сгенерировать тот самый сотовый. телефон Взаимодействие серверных сервисов,Только тогда вы сможете получить нужные данные,так,Какие изменения произошли в процессе взаимодействия,Какие данные генерируются, становится обязательным домашним заданием,Также отражен смысл захвата пакетов.
Инструменты захвата пакетов разделены на несколько категорий.,Как наш компьютерный терминал ИспользовалCharles
、Fiddler
Является форвардным агентомизинструмент。Если у вас семиуровневая модель сетевых запросовиметь Понятноразвязатьизразговаривать,Вы знаете, что это происходит на «сеансовом уровне, уровне представления、Прикладной уровень(В пятиуровневой модели TCP/IP) эти три уровня вместе называются прикладным уровнем.
”Прикладной уровень,Прокси-серверы прикладного уровня легко обойти,Если мы внимательно посмотрим на дно,Доступно больше данных,Например, переходя на транспортный уровень,Обычно имеется в виду наш андроидначальствоиспользоватьизTrony
,ios
начальствоиспользоватьмаленькая ракетаshadownsockets
На самом деле они все действуютvpn
Это работает на этом уровне。Дальнейшее изучение, напримерwireshack
Сетевой картой теперь можно управлять.,Пока данные проходят через назначенную сетевую карту,будет захвачен。И нравитсяnginx
такизобратный проксиинструмент,На самом деле это сервисный уровень прокси.,Играет роль, подобнуюvpn
из Эффект。Только не сообщайте запрашивающей стороне, кто предоставляет услугу.,Он обрабатывает все запросы,Затем перенаправьте запрос конкретному приложению для обработки.,Если вы как клиент,Фактический резерв позжеиз Сервис для вас Эквивалентночерный ящик。И для клиентского проксиCharles、Fiddler
Многие запросы не могут быть перехвачены,Вот причина,некоторые приложения,Для прокси он напрямую блокируется при совершении запросов.,Так что такое одиночество ты полностью понимаешь. Для этой ситуации,Мы должны найти способ,Может ли весь входной/выходной трафик таких приложений, как сотовый телефон, иметь единый интерфейс?,Затем вы можете контролировать этот порт,Все взаимодействия в приложении могут быть обнаружены,иметьбезиметьтакодининструмент Шерстяная ткань?милыйизTrony
оно появилось,Это верно,Это такой инструмент. Чтобы подчеркнуть,Если само приложение не блокирует прокси клиента,那你就без必要начальствоTrony
Понятно,Начинается конкретное развертывание.
Семиуровневая модель сети
Charles
,Различные обучающие программы в Интернете.,Вы можете понять это с первого взглядаCharles+Trony
,Позвольте мне подчеркнуть здесьTrony
в симуляторе Установить После этого,Если бы ты был тамwifi
открыть в Понятно Ручной прокси,Запрос пересылается на этот компьютер,Давайте поместим это здесьРучной прокси
закрыть,Потому что теперь ты используешьTrony
занять свое местоиметьпоток,Местоиметь Все должно быть тамTrony
Средние настройки。具体Конфигурация网начальствотакже можно найти,Я уточняю.Ключевым моментом здесь является то, что после второго шага настройки инструмента,Где отображается захваченный трафик?。Charles
из Порт по умолчанию8888
,ты используешьifconfig
Команда для проверкиen0
серединаinet
изipценить,Это ваш местный адрес,таксотовый телефонотвечать Использовалпоток都经过Charles
Агент завершает взаимодействие,ТыCharles
начальствоможно увидеть эти запросы,Это тоже захват пакетовизпринцип。иCharles+Trony
Принцип тот же,В конечном итоге весь трафик проходит черезCharles
,такбудет пойман,ты можешь видеть。Единственная разница в том,Trony
帮你развязать决Понятноиметьнекоторыйсотовый телефон Приложение не позволяет использовать прокси,Или в других ситуациях, когда вам запрещено запрашивать,Он заставляет весь трафик проходить через него.,Он снова передает вам запросизCharles
,Теперь вы можете увидеть трафик, который до сих пор был для вас невидим. Суммируя,финальный请求都是被抓到ПонятноCharles
в。
Мы сделали так много,Захват различных запросов приложения,Всегда есть конечная цель. Если ты тестировщик,В это время,Вы можете суммировать тестовые примеры,Например, на этот раз подготовканачальство线三个отвечатьиспользоватьActivity
,Сколько интерфейсов имеет каждый интерфейс?,Правильный ли интерфейс первого экрана?,Данные верны? Это контент, который может быть протестирован людьми. Если вы автоматизатор,Вы можете писать сценарии,Структура возврата интерфейса, определенная в документе,Структура возврата захвата пакета Чарльза,Пройдитесь и распечатайте, чтобы увидеть, не является ли структура противоречивой или что-то в этом роде.,Что касается точности данных, возможно, вам придется провести некоторые расчеты или прочитать документацию по продукту. Потому что я планирую смоделировать операцию,Затем сделайте скриншот,так Мне нужноиметь Вы можете поддержать меня в автоматизацииизинструмент,этоAppium
,У него также есть клиент,Преимущество установки клиента в том, что с его помощью можно распечатать процесс взаимодействия средства автоматизации и приложения в эмуляторе Android.,Это также упрощает отладку.
pip install Appium-Python-Client Selenium
Заказ Установить,послеиспользоватьfrom appium import webdriver
引入就可以耍戏安卓отвечатьиспользовать ПонятноНапример, я открываю первый экран приложения:
from appium import webdriver
import time
desired_caps={}
# Эмулятор Android Номер версии
desired_caps = {
"platformName": "Android", # Операционная система
"deviceName": "emulator-5554", # оборудование ID
"appPackage": "com.hehax.chat_create_shou", # app имя пакета
"appActivity": "com.junruy.wechat_creater.ui.activity.main.MainActivity", # app Главное при запуске Activity
'noReset': True, # Стоит ли сохранять session информация, чтобы избежать повторного входа в систему
'unicodeKeyboard': True, # использовать unicodeKeyboard кодировка для отправки строки
'resetKeyboard': True # Скрыть клавиатуру
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
Несколько команд, которые могут вам понадобиться: