2013-05-16 5 views
18

나는 웹 사이트 http://www.magickartenmarkt.de에 로그인하고 회원 영역 (https://www.magickartenmarkt.de/?mainPage=showWants)에서 분석을 시도하고 있습니다. 이것에 대한 다른 예를 보았지만, 왜 내 접근법이 효과가 없는지 알 수 없습니다. 나는 첫 번째 접근 방식에 맞는 양식을 찾았지만 그것이 효과가 있었는지 확실하지 않다. 두 번째 접근 방식에서 웹 페이지를 보류하면 회원 영역에 대한 액세스 권한이없는 것으로 나타납니다.파이썬으로 웹 사이트에 로그인하여 기계화하는 방법

나는 어떤 도움도 기뻐합니다.

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

답변

21

탐색을 용이하게하기 위해 브라우저 인스턴스를 사용하지 않는 이유는 무엇입니까? Mechanize에는 특정 양식을 선택할 수있는 기능이 있습니다 (예 : nr = 0은 페이지에서 첫 번째 양식을 선택합니다).

+0

감사합니다. 그것은 매력처럼 작동합니다. 이 구현으로 쿠키에 대해 걱정할 필요가 있습니까? 또한 브라우저 확인 .set_handle_refresh (기계어 ._http.HTTPRefreshProcessor(), max_time = 1) ' this. 브라우저 (객체?)가 매초마다 웹 페이지를 새로 고칩니다. – Rappel

+0

브라우저는 쿠키를 자체 세션에 저장합니다 (스크립트가 종료되거나 더 이상 특정 인스턴스를 사용하지 않으면 손실됩니다). 하지만 쿠키가 만료되지 않는 한 향후 쿠키를 사용할 수있게하려면 cookielib (http://docs.python.org)을 사용해야합니다. /2/library/cookielib.html – Ford

+1

나는 그것이'browser = mechanize.Browser()'라고 믿는다. –