【问题标题】:Fetching cookies from a file with python使用python从文件中获取cookie
【发布时间】:2012-02-29 21:16:12
【问题描述】:

我正在使用 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 信息页面,但那里没有太多示例,而且我无法让它工作。任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 您的目标是获取搜索结果还是保存 cookie?

标签: python mechanize cookielib


【解决方案1】:

显然你需要使用相同的浏览器实例:

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

【讨论】:

    【解决方案2】:

    您必须先登录才能保存 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)
    

    编辑:只是为了补充答案,我目前正在处理一个网站上的身份验证,我必须在保存和加载方法中将两个选项都更改为 ignore_discard=True、ignore_expires=True。否则它将不起作用,因为我收到的三个 cookie 中只有一个会被保存。我查看了 Firefox,它也保存了所有三个 cookie。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2013-11-13
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多