2013-05-16 52 views
18

我試圖登錄到網站http://www.magickartenmarkt.de並在成員區域(https://www.magickartenmarkt.de/?mainPage=showWants)做一些分析。我看到了其他的例子,但我不明白爲什麼我的方法不起作用。我確定了第一種方法的正確形式,但尚不清楚它是否有效。 在第二種方法中,returing網頁顯示我無法訪問會員區。如何使用python和機械化登錄網站

我會很高興的任何幫助。

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

爲什麼不使用瀏覽器實例來方便導航?機械化也有選擇特定形式的能力(例如,nr = 0將選擇頁面上的第一個表格)

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

感謝您的建議!它像一個魅力。我需要擔心這個實現中的cookie嗎?還發現 'browser.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),max_time = 1)' this。這是否意味着瀏覽器(對象?)每秒都會刷新網頁? – Rappel

+0

瀏覽器會將cookie保存在自己的會話中(一旦腳本終止或者您不再使用該特定實例,它們將丟失)。但是,如果您希望這些cookie可用於將來的會話(例如,在cookie未過期的情況下將來調用腳本),則必須使用cookielib,http://docs.python.org /2/library/cookielib.html – Ford

+1

我相信它是'browser = mechanize.Browser()' –