J'essaie de publier une demande de connexion à un site Web en utilisant le module Requests en Python mais cela ne fonctionne pas vraiment. Je suis nouveau dans ce domaine ... donc je ne peux pas savoir si je dois créer des cookies de nom d'utilisateur et de mot de passe ou un type d'autorisation HTTP que j'ai trouvé (??).
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
Alors maintenant, je pense que je suis censé utiliser "post" et cookies ...
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
J'ai le sentiment que je fais mal le truc des cookies ... Je ne sais pas.
S'il ne se connecte pas correctement, le titre de la page d'accueil doit apparaître sur "Locationary.com" et si tel est le cas, ce doit être "Page d'accueil".
Si vous pouviez peut-être m'expliquer quelques choses sur les demandes et les cookies et m'aider avec cela, je l'apprécierais grandement. :RÉ
Merci.
... Cela n'a toujours pas vraiment fonctionné. D'accord ... voici donc ce que dit le code HTML de la page d'accueil avant de vous connecter:
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
Je pense donc que je fais les choses correctement, mais la sortie est toujours "Locationary.com"
2ème EDIT:
Je veux pouvoir rester connecté pendant une longue période et chaque fois que je demande une page sous ce domaine, je veux que le contenu s'affiche comme si j'étais connecté.
la source
Je sais que vous avez trouvé une autre solution, mais pour ceux comme moi qui trouvent cette question, à la recherche de la même chose, cela peut être réalisé avec des demandes comme suit:
Tout d'abord, comme Marcus l'a fait, vérifiez la source du formulaire de connexion pour obtenir trois informations: l'url sur laquelle le formulaire publie et les attributs de nom des champs de nom d'utilisateur et de mot de passe. Dans son exemple, ils sont inUserName et inUserPass.
Une fois que vous avez cela, vous pouvez utiliser une
requests.Session()
instance pour envoyer une demande de publication à l'URL de connexion avec vos informations de connexion en tant que charge utile. Faire des requêtes à partir d'une instance de session revient essentiellement à utiliser des requêtes normalement, cela ajoute simplement de la persistance, vous permettant de stocker et d'utiliser des cookies, etc.En supposant que votre tentative de connexion a réussi, vous pouvez simplement utiliser l'instance de session pour effectuer d'autres demandes sur le site. Le cookie qui vous identifie sera utilisé pour autoriser les demandes.
Exemple
la source
p = s.post('LOGIN_URL.....
et puisp.text
Laissez-moi essayer de faire simple, supposons que l'URL du site soit http://example.com/ et supposons que vous deviez vous inscrire en remplissant le nom d'utilisateur et le mot de passe, nous allons donc à la page de connexion dire http: // exemple. com / login.php maintenant et affichez son code source et recherchez l'URL d'action, il sera sous forme de balise quelque chose comme
maintenant, prenez userinfo.php pour créer une URL absolue qui sera ' http://example.com/userinfo.php ', exécutez maintenant un simple script python
J'espère que cela aidera quelqu'un quelque part un jour.
la source
webbrowser
moduleprint r.content
- dessus est faux, il devrait utiliserprint(r.content)
Découvrez le nom des entrées utilisées sur le formulaire des sites Web pour les noms d'utilisateur
<...name=username.../>
et les mots de passe<...name=password../>
et remplacez-les dans le script ci-dessous. Remplacez également l'URL pour pointer vers le site auquel vous souhaitez vous connecter.login.py
L'utilisation de
disable_warnings(InsecureRequestWarning)
désactivera toute sortie du script lors de la tentative de connexion à des sites avec des certificats SSL non vérifiés.Supplémentaire:
Pour exécuter ce script à partir de la ligne de commande sur un système UNIX, placez-le dans un répertoire, c'est
home/scripts
-à- dire et ajoutez ce répertoire à votre chemin dans~/.bash_profile
ou dans un fichier similaire utilisé par le terminal.Ensuite, créez un lien vers ce script python à l'intérieur
home/scripts/login.py
Fermez votre terminal, démarrez-en un nouveau, exécutez
login
la source
La
requests.Session()
solution a aidé à se connecter à un formulaire avec protection CSRF (tel qu'utilisé dans les formulaires Flask-WTF). Vérifiez si uncsrf_token
est requis comme champ caché et ajoutez-le à la charge utile avec le nom d'utilisateur et le mot de passe:la source