Извлечение куки из файла с питоном - PullRequest
3 голосов
/ 08 февраля 2012

Я использую Mechanize и Python для входа на сайт.Я создал две функции.Первый входит в систему, а второй выполняет поиск на сайте.Как именно я сохраняю куки из логина, чтобы при поиске у меня был куки.

Текущий код.

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 голосов
/ 27 мая 2013

Вы должны войти в систему, прежде чем сможете сохранить куки:

   # 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, и он также сохраняет все три куки.

3 голосов
/ 08 февраля 2012

Вам нужно использовать тот же экземпляр браузера, очевидно:

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