2013-05-16 19 views
18

Ich versuche, auf der Website http://www.magickartenmarkt.de einloggen und analysieren Sie im Member-Bereich (https://www.magickartenmarkt.de/?mainPage=showWants). Ich habe andere Beispiele dafür gesehen, aber ich verstehe nicht, warum meine Ansätze nicht funktionieren. Ich habe die richtigen Formen für den ersten Ansatz identifiziert, aber es ist nicht klar, ob es funktioniert hat. Im zweiten Ansatz zeigt mir die Returing-Webseite, dass ich keinen Zugriff auf den Mitgliederbereich habe.So loggen Sie sich auf eine Website mit Python und mechanisieren

Ich würde mich freuen für jede Hilfe.

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() 

Antwort

21

Warum nicht eine Browser-Instanz verwenden, um die Navigation zu erleichtern? Mechanisieren hat auch die Fähigkeit, bestimmte Formen zu wählen (z nr = 0 wird das erste Formular auf der Seite wählen)

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

Vielen Dank für den Hinweis! Es wirkt wie ein Zauber. Muss ich mich bei dieser Implementierung um Cookies kümmern? Auch gefunden 'browser.set_handle_refresh (mechanize._http.HTTPRefreshProcessor(), max_time = 1)' dies. Bedeutet das, dass der Browser (Objekt?) Die Webseiten jede Sekunde aktualisiert? – Rappel

+0

Der Browser speichert die Cookies in seiner eigenen Sitzung (sie gehen verloren, sobald das Skript beendet wird oder Sie diese bestimmte Instanz nicht mehr verwenden). Wenn Sie jedoch möchten, dass diese Cookies für zukünftige Sitzungen verfügbar sind (zB bei zukünftigen Aufrufen eines Skripts, solange die Cookies nicht abgelaufen sind), müssen Sie cookielib, http://docs.python.org, verwenden /2/library/cookielib.html – Ford

+1

Ich glaube, es ist 'browser = mechanize.Browser()' –