2012-02-08 57 views
3

我正在使用mechanize和python登錄到一個站點。我創建了兩個函數。第一個登錄,第二個搜索該網站。我如何從登錄存儲cookie,所以當我來搜索時,我有一個cookie。從python文件中獲取cookie

當前的代碼。

import mechanize 
import cookielib 

def login(username, password): 
    # Browser 
    br = mechanize.Browser() 

    # Cookie Jar 
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 
    cj.save('cookies.txt', ignore_discard=False, ignore_expires=False) 
    # Rest of login 

def search(searchterm): 

    # Browser 
    br = mechanize.Browser() 

    # Cookie Jar 
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 
    cj.load('cookies.txt', ignore_discard=False, ignore_expires=False) 
    # Rest of search 

我通過cookielib的信息頁面閱讀,但沒有很多例子,我沒有得到它的工作。任何幫助,將不勝感激。由於

+0

是您的目標是獲取搜索結果還是保存cookie? – 2012-02-08 12:31:35

回答

3

您需要使用相同的瀏覽器實例,很明顯:

def login(browser, username, password): 
    # ... 

def search(browser, searchterm): 
    # ... 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
cj.load('cookies.txt', ignore_discard=False, ignore_expires=False) 
login(br, "user", "pw") 
search(br, "searchterm") 

現在,你有共同的背景下,你應該做的一類出來的:

class Session(object): 
    def __init__(browser): 
    self.browser = browser 

    def login(user, password): 
    # ... can access self.browser here 

    def search(searchterm): 
    # ... can access self.browser here 

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
cj.load('cookies.txt', ignore_discard=False, ignore_expires=False) 
session = Session(br) 
session.login("user", "pw") 
session.search("searchterm") 
3

你必須請先登錄,然後才能保存cookie:

# Cookie Jar 
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 

    # Do the login ... 

    # Only now you have something to save: 
    cj.save('cookies.txt', ignore_discard=False, ignore_expires=False) 

編輯:只需添加到答案,我是d目前在網站上進行身份驗證,我必須在save和load方法中將選項同時更改爲ignore_discard = True,ignore_expires = True。否則它將無法工作,因爲我收到的三個cookie中只有一個會被保存。我看着Firefox,它也保存了所有三個cookie。