2013-05-16 16 views
18

Próbuję zalogować się na stronie internetowej http://www.magickartenmarkt.de i zrobić kilka analiz w obszarze członkowskim (https://www.magickartenmarkt.de/?mainPage=showWants). Widziałem inne tego przykłady, ale nie rozumiem, dlaczego moje podejścia nie zadziałały. Zidentyfikowałem właściwe formularze dla pierwszego podejścia, ale nie jest jasne, czy zadziałało. W drugim podejściu strona, która mnie zatrzymuje, pokazuje mi, że nie mam dostępu do obszaru członkowskiego.Jak zalogować się do witryny za pomocą pythona i zmechanizować

Chciałbym cieszę się z każdej pomocy.

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

Odpowiedz

21

Dlaczego nie używać instancji przeglądarki, aby ułatwić nawigację? Mechanize ma również możliwość wyboru konkretnych formularzy (np. Nr = 0 wybiera pierwszy formularz na stronie)

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

Dzięki za poradę! To działa jak urok. Czy muszę się martwić ciasteczkami z tą implementacją? Znaleźliśmy także 'browser.set_handle_refresh (mechanize._http.HTTPRefreshProcessor(), max_time = 1)' to. Czy to oznacza, że ​​przeglądarka (obiekt?) Odświeży strony internetowe co sekundę? – Rappel

+0

Przeglądarka zapisze pliki cookie w swojej własnej sesji (zostaną utracone, gdy skrypt się zakończy lub nie będziesz już używać tej konkretnej instancji). JEDNAKŻE, jeśli chcesz, aby te ciasteczka były dostępne dla przyszłych sesji (np. O przyszłych połączeniach do skryptu, dopóki ciasteczka nie wygasną), będziesz musiał użyć cookielib, http://docs.python.org /2/library/cookielib.html – Ford

+1

Wierzę, że to "browser = mechanize.Browser()' –

Powiązane problemy