Table des matières:

Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone : 6 étapes (avec photos)
Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone : 6 étapes (avec photos)

Vidéo: Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone : 6 étapes (avec photos)

Vidéo: Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone : 6 étapes (avec photos)
Vidéo: Flutter Firebase Français: Tutorial Débutant Pour Configurer Firebase Dans Flutter 2024, Décembre
Anonim
Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone
Spidering d'un site Web Ajax avec un formulaire de connexion asynchrone

Le problème: les outils Spidering ne permettent pas l'authentification de connexion AJAX.

Cette instructable vous montrera comment vous connecter via un formulaire AJAX à l'aide de Python et d'un module appelé Mechanize. Les araignées sont des programmes d'automatisation Web qui deviennent un moyen de plus en plus populaire pour les gens de collecter des données en ligne. Ils se glissent sur le Web en rassemblant des matériaux précieux pour alimenter les sociétés Web les plus puissantes du monde. D'autres rampent et rassemblent des ensembles de données spécifiques pour améliorer la prise de décision, ou déduire ce qui est actuellement "dans", ou trouver les itinéraires de voyage les moins chers. Les araignées (web crawlers, webbots ou screen scrapers) sont idéales pour transformer le goop HTML en un semblant de données intelligentes, mais nous avons un problème en ce qui concerne les pages Web compatibles AJAX qui ont des sessions JavaScript et des cookies activées qui ne sont pas navigables avec la normale ensemble d'outils d'araignée. Dans ce instructable, nous accéderons à notre propre page de membre sur pubmatic.com. Ces étapes vous montreront une méthode à suivre, mais votre page sera différente. S'amuser!

Étape 1: Rassemblez les matériaux

Rassembler des matériaux
Rassembler des matériaux

Vous devrez commencer à compléter vos ressources de programmation. Vous aurez besoin des programmes suivants. Utilisez leurs guides pour vous aider à installer ces…Installez FirebugC'est un module complémentaire FirefoxInstallez PythonAllez à: python.orgAllez à: python.orgInstallez le module MechanizeGet MechanizeGet MechanizeAutres outils utiles Spidering:BeautifulSoup

Étape 2: Trouvez les en-têtes nécessaires pour créer une session

Une araignée bien conçue accédera à une page Web comme s'il s'agissait d'un navigateur contrôlé par un être humain gardant cachés des indices quant à sa véritable origine. Une partie de l'interaction entre les navigateurs et les serveurs se fait via les requêtes GET et POST que vous pouvez retrouver dans les en-têtes (cette information est rarement affichée sur un navigateur, mais est très importante). Vous pouvez afficher certaines de ces informations en appuyant sur Ctrl I (dans Firefox) pour ouvrir la fenêtre Informations sur la page. Pour vous déguiser en navigateur aux manières douces, vous devez vous identifier en utilisant les mêmes identifiants. Donc, étant donné que la plupart des navigateurs spider n'ont pas d'interpréteur javascript, nous devrons nous connecter via une route alternative. Commençons par obtenir les informations d'en-tête envoyées par le navigateur lorsque vous cliquez sur Soumettre. S'il s'agissait d'une connexion de navigateur ordinaire, vous utiliseriez Mechanize pour remplir le formulaire et cliquer sur soumettre. Les formulaires de connexion normaux sont encapsulés dans une balise … et Mechanize serait en mesure de soumettre cela et d'interroger la page suivante sans problème. Comme nous n'avons pas de balise de formulaire remplie, la fonction de soumission est gérée par javascript. Vérifions la fonction submitForm de pubmatic. Pour ce faire, ouvrez d'abord la page Web dans Firefox et activez Firebug en cliquant sur la luciole dans le coin inférieur droit. Cliquez ensuite sur l'onglet script, copiez tout le code qui apparaît et collez-le dans votre logiciel d'édition de texte préféré. Vous pouvez alors supprimer tout le code sauf la fonction submitForm. Cela commence par la fonction "submitForm(theform) {" et tout ce qui se trouve entre cela et les fonctions fermant l'accolade "}". En analysant cette fonction très primitivement, nous remarquons qu'une authentification se produit en ramenant une variable appelée xmldoc qui est analysée comme xml. C'est une caractéristique clé d'AJAX, il a interrogé le serveur et ramené un document XML contenant une arborescence d'informations. Le nœud session_id contient le session_id si l'authentification a réussi, vous pouvez le savoir en regardant ce bout de code: "if (session_id != null) { //connexion réussie". Maintenant, nous voulons empêcher ce bit de javascript de nous emmener n'importe où afin que nous puissions voir ce qui est publié sur le serveur lors de l'authentification. Pour ce faire, nous commentons toutes les redirections de fenêtre qui ressemblent à ceci: "window.location=…". Pour commenter ceci, ajoutez des doubles barres obliques avant comme ceci: "//window.location…" cela empêche l'exécution du code. Vous pouvez télécharger le fichier Javascript ci-dessous qui contient ces modifications déjà effectuées. Copiez et collez ce bit modifié de javascript dans la fenêtre de la console à droite et cliquez sur Exécuter. Cela remplace la fonction javascript déjà présente dans la page avec notre nouvelle version. Maintenant, lorsque vous remplissez vos informations d'identification et cliquez sur soumettre, vous devriez voir les informations d'en-tête POST et GET remplir la console, mais vous n'irez nulle part. Les informations POST sont les informations envoyées au serveur par les fonctions AJAX, vous voulez être autant comme cela que possible, copiez et collez ces informations dans le bloc-notes.

Étape 3: préparer le code

Avant d'ajouter les nouveaux en-têtes que nous avons trouvés, créons un modèle de code python de connexion Mechanize. Nous faisons cela pour deux raisons, d'abord nous avons un composant qui fonctionne pour ajouter de nouvelles choses et ensuite vous voyez comment vous vous connecteriez normalement à une page Web non AJAX-y. Ouvrez le bloc-notes ou équivalent, et copiez et collez le Suivant. Lorsque vous avez terminé, enregistrez-le sous youfilename.py quelque part que vous pouvez trouver.#!/usr/bin/python# -*- coding: utf-8 -*-#Start with your module imports:from mechanize import Browser #Create your instance de navigateur via l'appel de fonction Browser();br = Browser()#Configurez le navigateur pour qu'il ignore les requêtes spiders.txt#Faites ceci avec précaution, si la page Web n'aime pas les araignées, elles pourraient être contrariées de vous y trouverbr.set_handle_robots(False) #Ouvrez la page à laquelle vous souhaitez vous connecter tobr.open("https://pubmatic.com/04_betasignin.jsp")#Parce que je connais le nom du formulaire, je peux simplement sélectionner le formulaire par le nombr.select_form ("login")#En utilisant les noms des éléments du formulaire, je saisis les noms des éléments du formulairebr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () envoie le formulaire et extrait la page résultante, vous créez une nouvelle instance de navigateur#response ci-dessous contient la pageréponse résultante = br.submit()#Cela imprimera le corps de la page Web reçue#print response.read()

Étape 4: Envoyez les bons signaux

Envoyez les bons signaux
Envoyez les bons signaux

Mechanize a une fonction simple pour ajouter des en-têtes aux en-têtes POST, cela nous permettra d'apparaître dans le même navigateur que celui que vous avez utilisé pour accéder à la page la première fois. Ouvrez le fichier avec les en-têtes que vous avez trouvés à l'aide de Firebug et modifiez ce fichier texte pour qu'il corresponde. Remplacez tout dans les guillemets par l'élément approprié de la liste d'en-tête: 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-us, 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.1212104087.1212791201.20; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(aucun); JSESSIONID=60F194BE2A5D31C3EwoMAC=TomcatmC3E38618995EB82" no-cache"CACHE_CONTROL ="no-cache"Cela crée un ensemble de variables que vous pouvez ensuite utiliser pour ajouter à l'en-tête us ing ce code: 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 = [("Connection", CONNECTION)]br.add_header = [("Content-Type", 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)]Maintenant, lorsque nous appelons la fonction d'ouverture de page, les en-têtes seront également envoyés au serveur. br.open("https://pubmatic.com/04_betasignin.jsp")

Étape 5: Cookies mécanisés

Biscuits mécanisés
Biscuits mécanisés

Cette étape est due au fait que mécaniser automatise la gestion des cookies, mais il est important de savoir ce qui se passe:

Lorsque le formulaire est soumis, vous avez les bons en-têtes comme si vous aviez soumis en utilisant la fonction javascript. Le serveur authentifie ensuite ces informations et génère un identifiant de session et l'enregistre dans un cookie si le nom d'utilisateur et le mot de passe sont corrects. La bonne nouvelle est que Mechanize mange et régurgite automatiquement les cookies, vous n'avez donc pas à vous soucier de l'envoi et de la réception du cookie. Ainsi, une fois que vous avez créé un identifiant de session qui fonctionne, vous pouvez ensuite entrer dans la section réservée aux membres du site Web.

Étape 6: La clé du cœur

Maintenant que nous avons acquis un identifiant de session et que Mechanize l'a enregistré dans ses cookies, nous pouvons suivre le javascript pour voir où nous devons aller. En regardant à l'intérieur du "if (session_id != null) { //connexion réussie" pour voir où aller en cas de succès. En regardant le code de relocalisation de la fenêtre: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Math.random()*10000;" nous voyons que nous devons aller sur un site Web situé à l'adresse https://pubmatic.com/05_homeloggedin.jsp?v=some random number. Créons donc simplement un faux nombre aléatoire à saisir et créons une nouvelle instance de navigateur pour lire la page fraîchement ouverte:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")Et cela devrait que ce soit. Votre code est maintenant terminé, en utilisant les en-têtes appropriés et en mécanisant le gestionnaire de cookies, nous pouvons maintenant accéder aux entrailles de pubmatic. Ouvrez le terminal, chargez le package python ci-dessous et connectez-vous. Pour ce faire, tapez python2.5, puis le chemin d'accès au fichier.py.

Conseillé: