web-dev-qa-db-fra.com

Comment se connecter à un site Web avec python et mécaniser

j'essaie de me connecter au site Web http://www.magickartenmarkt.de et de faire quelques analyses dans la zone membre ( https://www.magickartenmarkt.de/ ? mainPage = showWants ). J'ai vu d'autres exemples pour cela, mais je ne comprends pas pourquoi mes approches n'ont pas fonctionné. J'ai identifié les bons formulaires pour la première approche, mais il n'est pas clair si cela a fonctionné. Dans la deuxième approche, la page Web de returing me montre que je n'ai pas accès à la zone membre.

Je serais ravi de toute aide.

import urllib2
import cookielib
import urllib
import requests
import mechanize
from mechanize._opener import urlopen
from mechanize._form import ParseResponse

USERNAME = 'Test'
PASSWORD = 'bla123'
URL      = "http://www.magickartenmarkt.de"

# first approach
request = mechanize.Request(URL)
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
# I don't want to close?!
#response.close()

# Username and Password are stored in this form
form = forms[1]

form["username"] = USERNAME
form["userPassword"] = PASSWORD

#proof entering data has worked
user = form["username"]  # a string, NOT a Control instance
print user
pw = form["userPassword"]  # a string, NOT a Control instance
print pw
#is this the page where I will redirected after login?
print urlopen(form.click()).read () 

#second approach
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : USERNAME, 'userPassword': PASSWORD})

#login
response_web = opener.open(URL, login_data)

#did it work? for me not....
resp = opener.open('https://www.magickartenmarkt.de/?mainPage=showWants')
print resp.read()
18
Rappel

Pourquoi ne pas utiliser une instance de navigateur pour faciliter la navigation? Mechanize a également la possibilité de sélectionner des formulaires particuliers (par exemple, nr = 0 sélectionnera le premier formulaire sur la page)

browser = mechanize.Browser()
browser.open(YOUR URL)
browser.select_form(nr = 0)
browser.form['username'] = USERNAME
browser.form['password'] = PASSWORD
browser.submit()
21
Ford