使用Python从文件中获取cookies

3
我将使用机械化和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信息页面,但那里没有太多的例子,我也没能让它工作。非常感谢您能提供帮助。谢谢。

你的目标是获取搜索结果还是保存Cookie? - Otto Allmendinger
2个回答

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

在保存cookies之前,您必须先登录:

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

编辑:补充答案,我目前正在处理一个需要更改选项为ignore_discard = True,ignore_expires = True的网站身份验证,这个选项需要在保存和加载方法中都更改,否则它将无法工作,因为只有三个cookie中的一个会被保存。 我看了看Firefox,它也保存了这三个cookie。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接