Pitón arrastrándose Sistema de Gestión de la Educación

Ayer aprendió los reptiles de entrada simples, por lo que el calor del momento para escribir un reptil que se arrastran los resultados, los siguientes reptiles escriben acerca de todo el proceso, ya que sólo el aprendizaje reptiles, por lo que encontrar una página de inicio de sesión de edad, no es necesario introducir un código de verificación

Información de escuela aquí desvanecido: http://xxxjwc.its.xxu.edu.cn/jsxsd/

Página de resultados: http: //xxxjwc.its.xxu.edu.cn/jsxsd/kscj/cjcx_list

La idea general:

1, utilizando el número de cuenta y la contraseña, registrar la información de las cookies

2, utilizando la información de las cookies para acceder a la página de resultados

3, utilizando la información obtenida falta XPath (esto no es un estudio cuidadoso, en virtud de un conocimiento aproximado, con no ser lo suficientemente bueno)

En primer lugar, el envío de obtención de URL de inicio de sesión

1.1 Usar las herramientas de desarrollo del navegador

Usando el navegador Chrome para abrir la página web del sistema de gestión educativa, el uso F12, haga clic en la red, verificación Conservar registro

1.2 acceso a la cuenta contraseña, utilizar herramientas para encontrar la entrada URL enviada (de hecho, se puede ver el código fuente de la página web de presentación forma url)

Entonces cabeceras más inferiores que se pueden ver a partir de los datos transmitidos se denomina datos codificados de la siguiente

Esto no es un tipo común de cuenta y la contraseña, leer el código fuente se encuentra de la siguiente manera

función submitForm1 () {   
        try { 
            . var xh = document.getElementById ( "UserAccount") de valor; 
            var pwd = document.getElementById ( "userPassword") valor.; 
            si (xh == "") { 
                alert ( "用户名不能为空"!); 
                falso retorno; 
            } 
            Si (PWD == "") { 
                alert ( "密码不能为空"!); 
                falso retorno; 
            } 
            Cuenta var = encodeInp (xh); 
            var passwd = encodeInp (PWD); 
            var codificada = Cuenta + "%%%" + passwd; 
            . document.getElementById ( "codificado") valor = codificada;
            var jzmmid = document.getElementById ( "Form1") jzmmid.;  
            return true; 
        } catch (e) {
            alerta (e.Message); 
            falso retorno; 
        } 
    }

Codificada encontrado después del empalme, número de cuenta y la contraseña cifrada entonces, existe la encodedInp () es una función de al conwork.js, como sigue:

eval ( función (p, a, c, k, e, d) {e = función (c) { retorno(C <? Un "": e (parseInt (c / a))) + ((c = c% a)>? 35 String.fromCharCode (c + 29): c.toString (36))}; si ( ! ''. sustituir (/ ^ /, String)) {while (c -) d [e (c)] = k [c] || e (c); k = [función (e) {return d [ e]}]; e = función () {return '\\ w +'}; c = 1;}; while (c -) si (k [c]) p = p.replace (nuevo RegExp ( '\\ b '+ e (c) +' \\ b ' 'g'), k [c]); retorno p;} (' b 9 = "o + / ="; pq (a) {sea = ""; b 8,5,7 = ""; bf, g, c, 1 = ""; bi = 0; m {8 = ah (i ++); 5 = ah (i ++); 7 = ah (i ++); f = 8 >> 2; g = ((8 y 3) << 4) | (5 >> 4); c = ((5 & s) << 2) | (7 >> 6); 1 = 7 & t; k (j (5 )) {c = 1 = l} vk (j (7)) {1 = l} e = e + 9.d (f) + 9.d (g) + 9.d (c) + 9.d ( 1); 8 = 5 = 7 = ""; f = g = c = 1 = ""} u (i <a); re} '32,32',| Enc4 |||| de chr2 || chr3 | chr1 | keyStr | Entrada | var | ENC3 | charAt | Salida | ENC1 | ENC2 | charCodeAt || isNaN | si | 64 | hacerlo | longitud | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 | función | encodeInp | retorno | 15 | 63 | mientras | else'.split ( '|'), 0, {}))

Por lo que queremos cifrar el nombre de usuario y contraseña se necesita poseer una pitón reescribir esta función o directamente utilizando dentro de la función js, he elegido el uso directo de dentro de la función js, es necesario descargar el módulo PyExecJS, y luego execjs importación, número de cuenta y la generación de contraseñas codificada como sigue:

# 对账号密码进行编码

def make_user_token (nombre de usuario, contraseña): 
    con (abierto ' conwork.js ' ) como f: 
        ctx = execjs.compile (f.read ()) 
        username_encode = ctx.call ( ' encodeInp ' , nombre de usuario) 
        password_encode = ctx.call ( ' encodeInp ' , contraseña) 
    contador = username_encode + ' %%% ' + password_encode
     retorno contador

Los preparativos se han completado, se puede empezar a construir la galleta de registro

En segundo lugar, inicio de sesión

Debido a que sólo el aprendizaje reptiles, por lo que utiliza las cosas más básicas para escribir, el uso http.cookiejar en CookieJar para obtener la información de las cookies

# 1. Entre 
DEF get_opener ():
     # 1.1 Crear un CookieJar 
    cookierjar = CookieJar ()
     # 1.2 uso cookierjar objetos para crear un HTTPCookieProcess 
    Handler = request.HTTPCookieProcessor (cookierjar)
     # Handler creó en el paso 1.3 Uso para crear un abridor 
    abridor = Solicitud. - la build_opener (Handler)
     retorno abridor 

# 1.4 abridor usando solicitud de transmisión (número de cuenta y una contraseña), el objeto es obtener la galleta 
DEF Login (abridor, codificado): 
    Data = {} 
    de datos [ ' codificada ' ] = codificada 
    LOGIN_URL = 'http://xxxjwc.its.xxu.edu.cn/jsxsd/xk/LoginToXk ' 
    req = request.Request (login_url, data = parse.urlencode (datos) .encode ( ' utf-8 ' ), las cabeceras = cabeceras) 
    opener.open (req)

En tercer lugar, el acceso a la página de resultados

# 2.访问成绩页面
def visit_grade (abridor): 
    grade_url = ' http://xxxjwc.its.xxu.edu.cn/jsxsd/kscj/cjcx_list ' 
    req = request.Request (grade_url, cabeceras = cabeceras) 
    resp = abridor .open (req)
     retorno resp.read (). decodificación ( ' utf-8 ' )

En cuarto lugar, para obtener la información deseada resultados

Después de la obtención de la página de resultados, o puede utilizar XPath derramado para obtener el contenido deseado, y no me eligió para obtener información sobre su puntuación usando XPath

    = Web_data visit_grade (abridor) 
    HTML = etree.HTML (web_data) 
    grade_data = html.xpath ( ' .//*[@id="dataList "] ' ) # Tenga en cuenta que esta ruta se establece de acuerdo a la trayectoria deseada a su

Después de entonces registrado hacia fuera a información privilegiada, de acuerdo con conjunto deseado sus circunstancias específicas. Y hay un punto de la nota es que si se rastrea el interior de la tabla de datos,

html texto ya que el navegador tendrá un cierto grado de estandarización, no es tbody si el resultado es una ruta vacía, puede quitar tbody en XPath

En quinto lugar, el efecto global

todos los códigos

de urllib importación solicitud, análisis sintáctico
 de http.cookiejar importar CookieJar
 de lxml importación etree
 importación execjs 

cabeceras = {
     ' User-Agent ' : ' Mozilla / 5.0 (Linux; Android 6.0; Nexus 5 Construir / MRA58N) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 76.0.3809.132 Mobile Safari / 537.36 ' 
} 

# 1.登录
def get_opener ():
     # 1.1创建一个CookieJar 
    cookierjar = CookieJar ()
     # 1.2使用cookierjar创建一个HTTPCookieProcess对象
    = Handler request.HTTPCookieProcessor (cookierjar)
     # Handler creó en el paso 1.3 Uso para crear un abridor 
    abridor = request.build_opener (Handler)
     de retorno abridor 

# 1.4 envía una solicitud a través de la apertura de la (nombre de usuario y contraseña) para registrar el objetivo es conseguir la cookie 
DEF la sesión ( abridor, codificado): 
    Data = {} 
    de datos [ ' codificada ' ] = codificada 
    LOGIN_URL = ' http://xxxjwc.its.xxu.edu.cn/jsxsd/xk/LoginToXk ' 
    REQ = request.Request (LOGIN_URL, Data = parse.urlencode (Data) .encode ( ' UTF. 8 ' ), las cabeceras = cabeceras)
    opener.open (REQ)
    
# 2. Acceder a la página de resultados de 
DEF visit_grade (abridor): 
    grade_url = ' http://xxxjwc.its.xxu.edu.cn/jsxsd/kscj/cjcx_list ' 
    REQ = request.Request (grade_url, cabeceras = cabeceras) 
    RESP = abridor .Open (REQ)
     de retorno . resp.read () de decodificación ( ' UTF-8. ' ) 


# de contraseña de la cuenta se codifica 

DEF make_user_token (nombre de usuario, contraseña): 
    con Open ( ' conwork.js ' ) AS F: 
        CTX = execjs. la compilación (alcanzado, f.read ()) 
        username_encode= Ctx.call ( 'encodeInp 'nombre de usuario) 
        password_encode = ctx.call ( ' encodeInp 'contraseña) 
    contador = username_encode + ' %%% ' + password_encode
     retorno contador si __name__ == ' __main__ ' : 
    nombre de usuario = ' xxxxxxxx ' 
    contraseña = ' XXXXXXXXXXXXXXXXX ' 
    codificada = make_user_token (nombre de usuario, contraseña) 
    abridor = get_opener ()

  
    de inicio de sesión (abridor, codificada) 
    web_data = visit_grade (abridor) 
    html = etree.HTML (web_data) 
    grade_data = html.xpath ( ' .//*[@id="dataList "] ' )
     para i en grade_data [0 ]: 
        n = 0 
        s = "" 
        para j en i:
             si n == 3 : 
                s + = j.text 
                s + = " \ t " 
            elif n == 4 : 
                s + = j.text 
                s + = " \ t " 
            elif n == 5 :
                 para grado en j: 
                    s + = grade.text 
                    s + = " \ t " 
            elif n == 6 : 
                s + = j.text 
                s + = " \ t " 
            n + = 1
         de impresión (s)
                
    

Un reptil básica sobre el pozo, por supuesto, muy simple, con un estudio en profundidad de este último podría escribir este artículo para mejorarlo.

Supongo que te gusta

Origin www.cnblogs.com/caijiyang/p/12551043.html
Recomendado
Clasificación