使用Python从文件中获取Cookies

3 投票
2 回答
4580 浏览
提问于 2025-04-17 12:34

我正在用 mechanize 和 python 登录一个网站。我创建了两个函数,第一个是登录,第二个是搜索网站。请问我该如何保存登录时的 cookies,这样在搜索的时候就能用到这些 cookies 呢?

现在的代码是:

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 的信息页面,但那上面没有很多例子,我也没能让它正常工作。任何帮助都会很感激。谢谢!

2 个回答

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。否则的话,它就无法正常工作,因为我收到的三个 cookies 只有一个会被保存。我查看了 Firefox,发现它也能保存这三个 cookies。

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

撰写回答