Tabla de contenido:

Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico: 6 pasos (con imágenes)
Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico: 6 pasos (con imágenes)

Video: Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico: 6 pasos (con imágenes)

Video: Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico: 6 pasos (con imágenes)
Video: CS50 2013 - Week 9, continued 2024, Mes de julio
Anonim
Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico
Arañando un sitio web Ajax con un formulario de inicio de sesión asincrónico

El problema: las herramientas de Spidering no permiten la autenticación de inicio de sesión AJAX.

Este instructivo le mostrará cómo iniciar sesión a través de un formulario AJAX usando Python y un módulo llamado Mechanize. Las arañas son programas de automatización web que se están volviendo cada vez más populares para que las personas recopilen datos en línea. Se deslizan por la web recolectando materiales valiosos para alimentar a las empresas web más poderosas que existen. Otros se arrastran y recopilan conjuntos de datos específicos para mejorar la toma de decisiones, o inferir lo que está "en" actualmente, o encontrar las rutas de viaje más baratas. Las arañas (rastreadores web, webbots o raspadores de pantalla) son excelentes para convertir la sustancia pegajosa HTML en una apariencia de datos inteligentes, pero tenemos un problema cuando se trata de páginas web habilitadas para AJAX que tienen sesiones habilitadas para JavaScript y cookies que no son navegables con lo normal. conjunto de herramientas de arañas. En este instructable accederemos a nuestra propia página de miembros en pubmatic.com. Estos pasos le mostrarán un método a seguir, pero su página será diferente. ¡Divertirse!

Paso 1: Reúna los materiales

Reunir materiales
Reunir materiales

Deberá comenzar a complementar sus recursos de programación. Necesitará los siguientes programas. Use sus guías para ayudarlo a instalar estos … Instalar FirebugEs un complemento de FirefoxInstalar PythonVaya a: python.orgVaya a: python.orgInstale el módulo MechanizeObtenga MechanizeGet MechanizeOtras herramientas útiles de Spidering: BeautifulSoup

Paso 2: busque los encabezados necesarios para crear una sesión

Una araña bien diseñada accederá a una página web como si fuera un navegador controlado por un ser humano que mantiene ocultas las pistas sobre su verdadero origen. Parte de la interacción entre navegadores y servidores ocurre a través de solicitudes GET y POST que puede encontrar en los encabezados (esta información rara vez se muestra en un navegador, pero es muy importante). Puede ver parte de esta información presionando Ctrl I (en Firefox) para abrir la ventana Información de la página. Para disfrazarse como un navegador de modales suaves, debe identificarse con las mismas credenciales. Si intentara iniciar sesión en pubmatic con javascript desactivado en su navegador, no llegaría muy lejos ya que las redirecciones se realizan a través de javascript. Entonces, considerando que la mayoría de los navegadores araña no tienen intérpretes de JavaScript, tendremos que acceder al inicio de sesión a través de una ruta alternativa. Comencemos obteniendo la información del encabezado enviada desde el navegador cuando hace clic en enviar. Si se tratara de un inicio de sesión ordinario del navegador, utilizaría Mechanize para completar el formulario y hacer clic en enviar. Los formularios de inicio de sesión normales se encapsulan dentro de una etiqueta… y Mechanize podría enviar esto y sondear la página siguiente sin problemas. Dado que no tenemos una etiqueta de formulario completada, la función de envío está a cargo de javascript. Revisemos la función submitForm de pubmatic. Para hacer esto, primero abra la página web en Firefox y encienda Firebug haciendo clic en la luciérnaga en la esquina inferior derecha. Luego haga clic en la pestaña de secuencia de comandos, copie todo el código que aparece y péguelo en su programa de edición de texto favorito. Luego puede eliminar todo el código excepto la función submitForm. Comienza con la función "submitForm (theform) {" y todo lo que hay entre esto y las funciones que cierran el corchete "}". Al analizar esta función de manera muy primitiva, notamos que se produce una autenticación que devuelve una variable llamada xmldoc que se está analizando como xml. Esta es una característica clave de AJAX: sondeó el servidor y trajo algún documento XML que contiene un árbol de información. El nodo session_id contiene el session_id si la autenticación fue exitosa, puede saber esto mirando este bit de código: "if (session_id! = Null) {// login exitoso". Ahora queremos evitar que este fragmento de javascript nos lleve a cualquier parte para que podamos ver lo que se publica en el servidor durante la autenticación. Para hacer esto, comentamos cualquier redirección de ventana que se vea así: "window.location =…". Para comentar esto, agregue barras dobles delante de ellos así: "//window.location …" esto evita que se ejecute el código. Puede descargar el archivo Javascript a continuación que ya tiene estas ediciones. Copie y pegue este fragmento editado de Javascript en el lado derecho de las ventanas de la consola y haga clic en Ejecutar. Esto anula la función de javascript que ya está en la página con nuestra nueva versión. Ahora, cuando complete sus credenciales y haga clic en enviar, debería ver la información del encabezado POST y GET en la consola, pero no irá a ninguna parte. así como sea posible, copie y pegue esa información en un bloc de notas.

Paso 3: preparar el código

Antes de agregar los nuevos encabezados que hemos encontrado, creemos un código Python de inicio de sesión de Mechanize con plantilla. Estamos haciendo esto por dos razones, primero para que tengamos un componente que funcione para agregar cosas nuevas y segundo para que vea cómo normalmente iniciaría sesión en una página web que no sea AJAX-y. Abra el bloc de notas o equivalente, y copie y pegue el archivo. siguiente. Cuando haya terminado, guárdelo como youfilename.py en algún lugar donde pueda encontrar. #! / Usr / bin / python # - * - coding: utf-8 - * - # Comience con las importaciones de su módulo: desde el navegador de importación instancia del navegador a través de la llamada a la función Browser (); br = Browser () # Configure el navegador para que ignore las solicitudes spiders.txt # Haga esto con cuidado, si a la página web no le gustan las arañas, es posible que se molesten al encontrarlo..set_handle_robots (False) #Abra la página en la que desea iniciar sesión enbr.open ("https://pubmatic.com/04_betasignin.jsp") #Porque conozco el nombre del formulario, simplemente puedo seleccionar el formulario por el nombrebr.select_form ("login") # Usando los nombres de los elementos del formulario, ingreso los nombres del formulario elementsbr ['email'] = "[email protected]" br ['password'] = "Asquid22" # br.submit () envía el formulario y extrae la página resultante, usted crea una nueva instancia del navegador

Paso 4: envíe las señales correctas

Envíe las señales correctas
Envíe las señales correctas

Mechanize tiene una función fácil para agregar encabezados a los encabezados POST, esto nos permitirá aparecer en el mismo navegador que usó para acceder a la página la primera vez. Abra el archivo con los encabezados que encontró usando Firebug y edite este archivo de texto para que coincida. Reemplace todo lo que esté entre las comillas con el elemento adecuado de la lista de encabezados: USER_AGENT = "Mozilla / 5.0 (X11; U; Linux i686; tr-TR; rv: 1.8.1.9) Gecko / 20071102 Pardus / 2007 Firefox / 2.0.0.9" HOST = "pubmatic.com" ACCEPT = "text / xml, application / xml, application / xhtml + xml, text / html; q = 0.9, text / plain; q = 0.8, image / png, * / *; q = 0.5 "ACCEPT_LANGUAGE =" en-es, en; q = 0.5 "ACCEPT_ENCODING =" gzip, deflate "ACCEPT_CHARSET =" ISO-8859-1, utf-8; q = 0.7, *; q = 0.7 "KEEP_ALIVE =" 300 " CONNECTION = "keep-alive" CONTENT_TYPE = "application / x-www-form-urlencoded" REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH =" 60 "COOKIE =" utma = 103266945.1970108054.1210113004.12121040187.121279120; KADUSERCOOKIE = EA2C3249-E822-456E-847A-1FF0D4085A85; utmz = 103266945.1210113004.1.1. no-cache "CACHE_CONTROL =" no-cache "Esto crea un conjunto de variables que luego puede usar para agregar al encabezado nosotros ing este código: br.add_header = [("Host", HOST)] br.add_headers = [("User-agent", USER_AGENT)] br.add_headers = [("Accept", ACCEPT)] br.add_header = [("Accept-Language", ACCEPT_LANGUAGE)] br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)] br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)] br.add_header = [("Keep-Alive ", KEEP_ALIVE)] br.add_headers = [(" Conexión ", CONEXIÓN)] br.add_header = [(" Tipo de contenido ", CONTENT_TYPE)] br.add_header = [(" Referer ", REFERER)] br.add_header = [("Content-Length", CONTENT_LENGTH)] br.add_headers = [("Cookie", COOKIE)] br.add_headers = [("Pragma", PRAGMA)] br.add_headers = [("Cache-Control", CACHE_CONTROL)] Ahora, cuando llamemos a la función de apertura de página, los encabezados también se enviarán al servidor. br.open ("https://pubmatic.com/04_betasignin.jsp")

Paso 5: Cookies mecanizadas

Cookies mecanizadas
Cookies mecanizadas

Este paso se debe a que mecanizar automatiza el manejo de cookies, pero es importante saber qué está sucediendo:

Cuando se envía el formulario, tiene los encabezados correctos como si lo hubiera enviado utilizando la función javascript. Luego, el servidor autentica esta información y genera una identificación de sesión y la guarda en una cookie si el nombre de usuario y la contraseña son correctos. La buena noticia es que Mechanize come y regurgita automáticamente las cookies para que no tenga que preocuparse por enviar y recibir las cookies. Entonces, una vez que cree una ID de sesión que funcione, puede ingresar a la sección solo para miembros del sitio web.

Paso 6: Llave del corazón

Ahora que hemos adquirido un ID de sesión y Mechanize lo guardó en sus cookies, podemos seguir el javascript para ver a dónde debemos ir. Mirando dentro de "if (session_id! = Null) {// inicio de sesión exitoso" para ver a dónde ir en caso de éxito. Mirando el código de reubicación de la ventana: "if (adurlbase.search (/pubmatic.com/)! = -1) {window.location =" https://pubmatic.com/05_homeloggedin.jsp "+"? V = "+ Math.random () * 10000; " vemos que tenemos que ir a un sitio web ubicado en https://pubmatic.com/05_homeloggedin.jsp?v=alguno número aleatorio. Así que creemos un número aleatorio falso para ingresar y creemos una nueva instancia de navegador para leer la página recién abierta: response2 = br.open ("https://pubmatic.com/05_homeloggedin.jsp?v=2703") Y eso debería serlo. Su código ahora está completo, al usar los encabezados adecuados y mecanizar el controlador de cookies, ahora podemos acceder a las entrañas de pubmatic. Abra la terminal, cargue el paquete de Python a continuación e inicie sesión. Para hacer esto, escriba python2.5 y luego la ruta del archivo.py.

Recomendado: