Combate real del rastreador de Python usando Airtest y mitmdump para rastrear datos de aplicaciones



prefacio

El rastreo de datos de aplicaciones es más fácil que el rastreo web, porque la capacidad anti-rastreador no es tan sólida y la mayoría de los datos se transmiten en forma de JSON, lo que facilita el análisis. En el lado web, podemos monitorear varias solicitudes de red y procesos de respuesta a través de las herramientas de desarrollo del navegador.Si queremos ver estos contenidos en el lado de la aplicación, necesitamos usar un software de captura de paquetes. El software de captura de paquetes comúnmente utilizado incluye WireShark, Filddler, Charles, mitmproxy, AnyProxy, etc., y sus principios son básicamente los mismos. Podemos poner el teléfono móvil bajo la supervisión del software de captura de paquetes configurando un proxy, de modo que podamos ver todas las solicitudes y respuestas que se producen durante la ejecución de la aplicación, lo que equivale a analizar Ajax. Si las URL, los parámetros, etc., de estas solicitudes son regulares, entonces podemos resumir la regularidad y usar directamente el programa para simular el rastreo. Si no son regulares, entonces podemos usar otra herramienta, mitmdump, para conectarnos a la secuencia de comandos de Python para procesar directamente la Respuesta. Además, el rastreo de la aplicación no debe ser realizado por humanos, también debe ser automatizado, por lo que también debemos controlar la animación de la aplicación, y la biblioteca utilizada aquí es Airtest.


1. Preparación preliminar

  1. Instalar Airtest (para clics automatizados)
  2. Instale Night Simulator, el sistema de teléfono móvil simulado es preferiblemente Android 5, mi Night Simulator es la versión 7.0.2.7
  3. Instale mitmdump (para procesar datos de respuesta)

dos ideas

1. Configurar el simulador Ye Shen

  1. La versión de adb en el simulador de Yeshen (adb.exe) y Airtest (nox_adb.exe) deben ser exactamente iguales, copie uno de ellos en otro archivo para asegurarse de que la versión de adb sea exactamente la misma.

    La ubicación adb del simulador Yeshen: ...\bin
    La ubicación adb de Airtest: ...\airtest\core\android\static\adb\windows

  2. Habilite las opciones de desarrollador y habilite la depuración de USB
    inserte la descripción de la imagen aquí

  3. Configure el agente e instale el certificado mitmdump en el simulador Yeshen, y el monitoreo normal es como se muestra a continuación
    inserte la descripción de la imagen aquí

2. Usa mitmdump para averiguar los datos

  • Después de instalar mitmdump con éxito, abra el lado web de mitmdump ejecutando el comando en cmd
    mitmweb
    
  • Empezar con éxito
    inserte la descripción de la imagen aquí
  • Encuentre la url con los datos que desea recopilar
    inserte la descripción de la imagen aquí

3. Realice un clic automático a través de Airtest

  1. Puede conectarse con éxito al simulador Yeshen a través de Airtest, como se muestra en la figura a continuación
    inserte la descripción de la imagen aquí

  2. hoyo que encontré

    No se puede encontrar el adb del emulador Yeshen para conectarse, es posible que la versión del adb sea diferente

    adb es el mismo y todavía no puedo encontrarlo, puede ser que la depuración de USB no esté activada

    Si aún no puede encontrarlo después de activar la depuración USB, reinicie el emulador Yeshen y airtest

3. Código

1. Supervisar el código de datos

  • Inicie el comando mitmdump.exe -s ruta
 mitmdump.exe -s .\mitmproxy\gg.py

El código es el siguiente (ejemplo):

# 启动命令
# mitmdump.exe -s .\mitmproxy\gg.py

import json
from mitmproxy import ctx
import pymongo
# pymongo有自带的连接池和自动重连机制,但是仍需要捕捉AutoReconnect异常并重新发起请求。
from pymongo.errors import AutoReconnect
from retry import retry
# 指定 mongodb 的连接IP,库名,集合
MONGO_CONNECTION_STRING = 'mongodb://192.168.27.101:27017'

client = pymongo.MongoClient(MONGO_CONNECTION_STRING)
db = client['crawle_case']
collection = db['tsy_2']
'''
AutoReconnect:捕捉到该错误时进行重试,这个参数可以是一个元组,里面放上多个需要重试的条件
tries:重试次数
delay:两次重试的间隔时间
'''
@retry(AutoReconnect, tries=4, delay=1)
def save_data(data):
    """
    将数据保存到 mongodb
    使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。
    upsert:
    是一种特殊的更新,如果没有找到符合条件的更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档;如果找到了匹配的文档,就正常更新,upsert非常方便,不必预置集合,同一套代码既能用于创建文档又可以更新文档
    """
    # # 存在则更新,不存在则新建,
    # collection.update_one({
    
    
    #     # 保证 数据 是唯一的
    #     '游戏名ID': data.get('游戏名ID')
    # }, {
    
    
    #     '$set': data
    # }, upsert=True)
    collection.insert_one(data)
def response(flow):
    url = 'https://app.taoshouyou.com/api/trades/gettradeslist'
    if flow.request.url.startswith(url):
        text = flow.response.text
        print(flow)
        data = json.loads(text)
        print(data)
        for a in data.get('data').get('list'):
            # print(a)
            id = a.get('id')
            name = a.get('name')
            gamename = a.get('gamename')
            shopname = a.get('shopname')
            officialprice = a.get('officialprice')
            discount = a.get('discount')
            price = a.get('price')
            areaname = a.get('areaname')
            goodsname = a.get('goodsname')
            clientname = a.get('clientname')
            shopUrl = a.get('shopUrl')
            wb_data = {
    
    
                '游戏名ID': id,
                '游戏标题': name,
                '游戏名': gamename,
                '店铺': shopname,
                '原价': officialprice,
                '折扣': discount,
                '现价': price,
                '区服': areaname,
                '账号类型': goodsname,
                '客服端': clientname,
                '商品url': shopUrl,
            }
            save_data(wb_data)

2. Código de comportamiento deslizante de Airtest

El código es el siguiente (ejemplo):

# -*- encoding=utf8 -*-
__author__ = "Administrator"
import time
from airtest.core.api import *

auto_setup(__file__)
while True:
    gg1 = 426,375
    gg2 = 426,1453
    swipe(gg2,gg1,duration=0.01)
    time.sleep(1)

4. Efecto de ejecución

  1. Inicie Night Simulator y abra la aplicación
  2. Comience a monitorear el código de datos
  3. Comience el código de comportamiento deslizante de Airtest
  4. monitoreo exitoso
    inserte la descripción de la imagen aquí
  5. Datos recopilados con éxito
    inserte la descripción de la imagen aquí

Resumir

Lo anterior es de lo que hablaré hoy. Este artículo solo presenta brevemente la recopilación simple de datos de la aplicación, que se limita al aprendizaje personal.

Supongo que te gusta

Origin blog.csdn.net/weixin_45688123/article/details/126855427
Recomendado
Clasificación