我正在使用mechanize和python登录网站。我创造了两个功能。第一个登录,第二个搜索站点。我如何从登录中存储cookie,所以当我来搜索时,我有一个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 :(得分: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")
答案 1 :(得分: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)
编辑:只是为了添加答案,我正在处理一个网站上的身份验证,我必须在save和load方法中将ignore_discard = True,ignore_expires = True的选项都更改为。否则它将无法工作,因为我收到的三个cookie中只有一个会被保存。我查看了Firefox,它也保存了所有三个cookie。