Después de dos días de retoques, finalmente lo logré y luego actualicé el artículo.
Implica varios puntos clave.
1. En cuanto al análisis de datos de redes móviles, utilizo Fiddler 4 para el análisis.
2. Con respecto al funcionamiento de las tablas de Excel, antes quería usar el módulo xlwings, pero como Office no estaba instalado, usé la versión castrada del gobierno wps2013 y no pude operarlo. Más tarde, usé los módulos xlrd, xlutils, Shutil y os para escribir un objeto de manipulación de Excel, pero descubrí que todavía había problemas. Después de eso, desinstalé la versión castrada de wps y la reemplacé con la última versión de wps2016, y pude operarla. Más tarde, no cambié el módulo xlwings, así que utilicé un módulo escrito por mí mismo. Big Pit: El módulo xlrd no parece admitir rutas chinas, por lo que todas las rutas están en inglés y, finalmente, los nombres de carpetas y archivos se convierten a chino.
3. Se clasifica y guarda el banco de preguntas.
1. Fiddler toma la solicitud de red de la aplicación móvil.
Fiddler es una "conexión de computadora" muy popular y útil, luego haga clic en el botón "Aceptar". (Consejo: puede configurar el cuadro desplegable en... Solo desde clientes remotos en la etiqueta HTTPS, que parece recibir solo solicitudes de red desde terminales remotas).
(3) En el comando de la computadora línea Ingrese ipconfig para encontrar la dirección IP de la computadora. (Mi IP LAN: 192.168.1.10)
(4) En el teléfono móvil, abra la "Configuración" -> "WLAN" del dispositivo Android, busque la red a la que desea conectarse, presione y Mantenga presionado y luego seleccione "Modificar red" para que aparezca el cuadro de diálogo de configuración de red y luego marque "Mostrar opciones avanzadas". (De hecho, los teléfonos Apple son similares).
(5) Seleccione "Manual" en el cuadro de entrada detrás de "Agente" e ingrese la dirección IP de la computadora en el cuadro de entrada detrás de "Nombre de host del servidor proxy". Ingrese 8888 en el cuadro de entrada detrás de "Puerto del servidor proxy" y luego haga clic en el botón "Guardar".
(6) Luego inicie la aplicación APP en el dispositivo Android y podrá ver los datos completos de solicitud y respuesta en Fiddler.
2. Análisis de datos de red de aplicaciones de aplicaciones móviles
Después de abrir un software de examen público en su teléfono móvil, podrá ver muchos enlaces de solicitud en la columna izquierda de Fiddler.
Haga clic en el enlace en el área amarilla de arriba para ver los datos detallados a la derecha.
En la columna de datos detallada a la derecha, podemos ver la URL solicitada: POST /android/sydw/exercises? & platform=android22 &version=6.4.3&supplier=tencent&app=gwy&deviceid=F4J/k8kxx 6+c 24 yqfuzaia==&av=8&kav=3 HTTP /1.1
Parámetros de solicitud de publicación ID del punto clave = 621638 & tipo = 3 & amp limit = 15
Los datos devueltos están en formato Json. A partir de los datos devueltos, podemos encontrar el número de pregunta correspondiente a los ID de pregunta, como 2084744.
Haga clic en la dirección del enlace en el cuadro rojo en la imagen de arriba (respuesta de solicitud de la red Fiddler) y podremos ver los datos en la columna de datos detallados a la derecha.
En la imagen superior podrás encontrar datos útiles como el enunciado de la pregunta, opciones, preguntas y respuestas de la pregunta con número de ID 2084744.
Básicamente, el análisis ha terminado. El modo de aplicación de esta aplicación móvil es básicamente el siguiente: primero solicite las identificaciones de las 15 preguntas y luego solicite los datos relacionados con las preguntas según las identificaciones de Meidaoti. Las pruebas posteriores demostraron que al modificar los parámetros cuando solicita ID de pregunta, puede solicitar hasta 100 ID de pregunta a la vez.
Además, puede encontrar el enlace de solicitud de clasificación del capítulo correspondiente en el enlace de solicitud a la izquierda y luego encontrar los ID de las preguntas correspondientes según el número de clasificación, para que se puedan capturar todas las preguntas.
3. control xls
Escribiré mi propio módulo basado en el módulo xlrd.
El código fuente está aquí, puede que haya algún problema con el formato. Necesita ser clasificado.
""python
#!/usr/bin/env python3
# -*-encoding:utf-8 -*-
"""
Creado el 14 de mayo de 2018 12:48:07
@Autor: Wang Zheng
sys _ Env: Windows _ AMD64 python 3. 5. 2
WeChat: hrcl2015 (WeChat)
Nombre de archivo: MyXls.py
Descripción: clase de operación de archivo xls MyXls
Nota: no puede haber nombres chinos en la ruta del archivo; de lo contrario, se producirá un error
"""
Importar open_workbook desde xlrd
Importar un copiar de xlutils.copy.
Importar sistema operativo, Shutil
Clase MyXls:
def __init__(self, fpath=None, modelfpath=None,sheetindex= Ninguno, protectrow=None, overwrite=True):
Self.openxlspath=''#' # Se ha abierto el archivo xls.
Self.sheetindex=None#El índice de la hoja de trabajo actual
self.rb=None#
Self.wb = Ninguno #Libro de trabajo
Self.ws = Ninguna #hoja de trabajo
Self. encabezado = 0 #El número de filas protegidas al principio.
si (fpath no es Ninguno) y (modelfpath no es Ninguno):
self.open_copy_xls(modelfpath, fpath, True)
elif fpath no es Ninguno:self .open_xls(fpath)
Si el índice de hoja no es Ninguno: self.get_sheet(sheetindex)
Si el índice de hoja no es Ninguno: self.headrow=protectrow
def open_xls(self, fpath):
path=fpath
Pruebe:
rb = open_workbook(path)
El la excepción es err:
print("El archivo no existe:"+str(err))
Devuelve Falso
#La hoja obtenida a través desheet_by_index() no tiene un método write().
#rs = rb.sheet_by_index(0)
# RS = Rb hoja _ por _ nombre(' hoja 1 ')
self.wb =. copy(rb)
self.openxlspath=path
Devuelve verdadero
def get_sheet(self,sheet_index=0):
Funciona Tabla = índice de la hoja de trabajo
#La hoja de trabajo obtenida mediante get_sheet() tiene un método write().
self.ws = self.wb.get_sheet(hoja de trabajo)
self.sheetindex=hojas
def write_xls(self, row_index, column_index, data_str) :
Fila, columna, datos = índice de fila, índice de columna, cadena de datos
#Write data
Self.ws.write (fila, columna, datos) # escribir (fila, columna, contenido), el índice comienza desde 0.
def write_xls_bycolname(self, row_index, column_name, data_str):
column_index = self . colname_to_num(column_name)
fila, columna, datos = índice de fila, índice de columna, cadena de datos
#Write data
Self.ws.write (fila, columna, datos) # escritura (fila, columna, contenido), el índice comienza desde 0.
def write_xls_bysheet(self,sheetindex,row_index, column_name,data_str):
''Escribe datos'''' en la fila y lista especificadas de la hoja de trabajo especificada.
if self.sheetindex! = índice de hoja: self . get _ hoja(índice de hoja)
self .escribir _ xls _ por colname(fila _ índice, nombre_columna, cadena_datos)
def save_xls(self, fpath) =Ninguno):
Si fpath es Ninguno:
self.wb.save(self.openxlspath)
print('saved '+self.openxlspath)
De lo contrario:
path=fpath
Self.wb.save(path)#Guardar el archivo xls.
Imprimir('guardado'+ruta)
Devolver Verdadero
def open_copy_xls(self, model_fpath, new_fpath, overwrite=True):
''Copia y abre el archivo xls que hace referencia al archivo de plantilla'''
Si os.path .exists(model_fpath):
new _ fpath = self . mkdir (new _ fpath)
if (no os.path.exists(new_fpath)) o sobrescribir:
#print('Copiar [%s] a [%s]' %(model_fpath, new_fpath))
shutil.copy(ruta del modelo, nueva ruta)
return self.open_xls(new_fpath)
Else:print(' El nuevo archivo ya existe, cambie el nuevo nombre del archivo '); Return False
Else:print('¡El archivo de plantilla no existe y no se puede copiar al nuevo archivo!');
def num_to_colname(self, col_index, start=0):
#Índice de columna al nombre de la columna, la base comienza desde 0, 0->A
if tipo(col_index)! = int:
Índice de columna de retorno
if start==0:
x=col_index+1
elif start==1 :
x = índice de columna
s= ' '
Flag=False#Bandera de préstamo
Y x & gt26: p> p>
Y=x%26#Remanente 0-25
Si y == 0:y = 26; bandera = Verdadero
D=chr(y+ 64) #Bajo
s=d+s
X=x//26#Cociente divisor
if bandera: x = x-1; Falso# Si desea tomar prestado un asiento, primero debe -1.
G=chr(x+64)#bit alto
s=g+s
Regresar s
def colname_to_num(self , colname, start=0):
#Nombre de columna al índice de columna A->0, B->1, el inicio base inicial es 0.
Si el tipo (nombre de columna) no es una cadena:
Devuelve el nombre de la columna
Colname=colname.upper()#Convertir a mayúsculas.
col = 0
¿Poder? = 1
#print(len(colname))#número de dígitos
Para el rango I(len(colname)- 1,-1,-1):#range( inicio =0, detener, paso=1)
Ch = colname[i] #Obtener las letras en orden inverso
Las letras en la posición #print(ch)#
col += (ord(ch) - ord('A') +? 1 ) *potencia
Potencia*= 26
#Imprimir (col-1)
Si inicio==0: devuelve col-1
Si inicio==1: devuelve col
def auto_mkdir(self, fpath):
''Completa automáticamente el directorio, si el directorio no existe, crea el directorio'''
#fpath='D:\\MyPython\\Chalk Public Examination Question Bank Extraction\\ 678\\980 \\test.txt '
fpath=fpath.replace('\\ ','/')
Si no es os.path.exists(fpath):
plst=fpath.split(sep='/')
Ruta = ' '
Si no, fpath termina con('/'):plst. = plst[: -1]
Para p en plst:
ruta=ruta+p+'/'
Si no es la ruta del sistema operativo. (ruta):OS .mkdir(ruta)
Ruta de retorno
if __name__=='__main__ ':
model _ fpath = ' D:\ \. mi python \ \ model .xls '
new _ fpath = ' D:\ \ mi python \ \ ABC \ \ xls '
# myxls. =MyXls()
# myxls .open_copy_xls(model_fpath,new_fpath)
# myxls.get_sheet(0)
myxls=MyXls(new_fpath,model_fpath,2 ,3)
Myxls.write_xls_bycolname (6, 'k', 'k columnas y 6 filas de datos')
# myxls.save_xls(new_fpath)
myxls.save_xls()
Aprobado
'''
4. Guardar archivo
Guardar como archivo xls y archivo txt, Luego convierta el archivo txt a un documento de Word e imprímalo. Hay alrededor de 7 categorías principales, más de 100 subcategorías y 12,737 preguntas.
5. Importar el software del banco de preguntas
Importar el archivo Xls al banco de preguntas.
6. Ya terminaste
PD: después de actualizar una aplicación, agregó una función para evitar que se capturen datos. Parece que no se puede actualizar a Android 5.1 y superiores.
Según las respuestas de internautas de alto nivel, los datos en texto plano también se pueden capturar utilizando el emulador de Android (versión del sistema 4.4).