web-dev-qa-db-fra.com

Utiliser Python pour vous connecter au site Web, remplir un formulaire, puis vous déconnecter

Dans le cadre de ma quête pour devenir meilleur à Python J'essaie maintenant de me connecter à un site Web que je fréquente, de m'envoyer un message privé, puis de me déconnecter. Jusqu'à présent, j'ai réussi pour me connecter (en utilisant urllib, cookiejar et urllib2). Cependant, je ne peux pas trouver comment remplir le formulaire requis pour m'envoyer un message.

Le formulaire se trouve à /messages.php?action=send. Il y a trois choses à remplir pour que le message soit envoyé: trois champs de texte nommés nom, titre et message. De plus, il y a un bouton de soumission (nommé "soumettre").

Comment puis-je remplir ce formulaire et l'envoyer?

20
Matthew
import urllib
import urllib2

name =  "name field"
data = {
        "name" : name 
       }

encoded_data = urllib.urlencode(data)
content = urllib2.urlopen("http://www.abc.com/messages.php?action=send",
        encoded_data)
print content.readlines()

remplacez simplement http://www.abc.com/messages.php?action=send avec l'URL où votre formulaire est soumis

répondez à votre commentaire: si l'URL est l'URL où se trouve votre formulaire, et que vous devez le faire juste pour un site Web, regardez le code source de la page et trouvez

<form method="POST" action="some_address.php">

et mettre cette adresse comme paramètre pour urllib2.urlopen

Et vous devez comprendre ce que fait le bouton submit. Il suffit d'envoyer une requête Http à l'url définie par action dans le formulaire. Donc, ce que vous faites est de simuler cette demande avec urllib2

14
Jan Vorcak

Vous voulez la bibliothèque mécaniser . Cela vous permet d'automatiser facilement le processus de navigation sur les sites Web et de soumission des formulaires/liens suivants. Le site auquel j'ai lié a de très bons exemples et une bonne documentation.

11
Andrew Wilkinson

Vous pouvez utiliser la mécanisation pour travailler facilement avec cela. Cela facilitera votre travail de soumission du formulaire. N'oubliez pas de vérifier les paramètres comme le nom, le titre, le message en voyant le code source du formulaire html.

import mechanize
br = mechanize.Browser()
br.open("http://mywebsite.com/messages.php?action=send")
br.select_form(nr=0)
br.form['name'] = 'Enter your Name'
br.form['title'] = 'Enter your Title'
br.form['message'] = 'Enter your message'
req = br.submit()
8
Prashant Dey

Essayez de déterminer les demandes qui sont faites (par exemple en utilisant Chrome ou avec Firefox/Firebug) et imitez la demande POST contenant le formulaire souhaité) Les données.

En plus de la grande bibliothèque de mécanisation mentionnée par Andrew, au cas où je vous suggère également d'utiliser BeautifulSoup pour analyser le code HTML.

Si vous ne voulez pas utiliser la mécanisation mais que vous voulez toujours une solution simple et propre pour créer des requêtes HTTP, je recommande le module excellend requêtes .

2
Danilo Bargen

Pour publier des données sur une page Web, utilisez cURL quelque chose comme ceci,

curl -d Name="Shrimant" -d title="Hello world" -d message="Hello, how are you" -d Form_Submit="Send" http://www.example.com/messages.php?action=send

L'option "-d" indique à cURL que l'élément suivant est des données à envoyer au serveur à http://www.example.com/messages.php?action=send

2
Smshrimant