Python PDF打印一个受密码保护的页面(最好是让wkhtmltopdf使用cookie)

Python PDF打印一个受密码保护的页面(最好是让wkhtmltopdf使用cookie),python,cookies,mechanize,wget,wkhtmltopdf,Python,Cookies,Mechanize,Wget,Wkhtmltopdf,我正在尝试使用wkhtmltopdf将受密码保护的页面打印为PDF,但我无法加载(工作)cookie,这意味着我总是只打印“登录”页面 登录后保存cookie 以下代码按预期工作:如果我登录,我可以查看正确的页面,无论我是从cookie加载的,还是输入了登录信息: class PrintPages(object): def __init__(self): ... self.browser = mechanize.Browser() self

我正在尝试使用
wkhtmltopdf
将受密码保护的页面打印为PDF,但我无法加载(工作)cookie,这意味着我总是只打印“登录”页面

登录后保存cookie 以下代码按预期工作:如果我登录,我可以查看正确的页面,无论我是从cookie加载的,还是输入了登录信息:

class PrintPages(object):
    def __init__(self):
        ...
        self.browser = mechanize.Browser()
        self.cj = mechanize.MozillaCookieJar()
        self.browser.set_cookiejar(self.cj)
        self.login("cookies.txt")

    def login(self, cookie_jar):
        """ Log in, save cookie if doesn't exist. Otherwise, load cookie. """
        if os.path.isfile(cookie_jar):
            self.cj.load(cookie_jar, ignore_discard=True, ignore_expires=True)
        else:
            self.browser.open(self.login_url)

            self.browser.select_form(name="loginform")
            self.browser["username"] = self.username
            self.browser["password"] = getpass.getpass()

            self.browser.submit()
            self.cj.save(cookie_jar, ignore_discard=True, ignore_expires=True)
(cookies.txt)
但是,告诉
wget
wkhtmltopdf
加载cookie会给我提供登录页面

$ wget -p --load-cookies cookies.txt sub.example.com/page.html
$ wkhtmltopdf --cookie-jar cookies.txt sub.example.com/page.html page.pdf
有什么好处?理想情况下,任何允许我打印成PDF的解决方案都是理想的,但我很好奇这里发生了什么


我正在使用:

  • wkhtmltopdf
    0.9.9版
  • mechanize
    :版本0.2.5

我没有解决您的Cookie特定问题的解决方案,但我们为打印具有权限的PDF所做的是:

  • 公开一个单独的视图,不进行登录身份验证
  • 为要生成的pdf创建一次性令牌
  • 在未进行身份验证的视图中,确保密钥正确且尚未使用。如果令牌有效,则返回html以转换为pdf
  • 如果视图需要知道哪个用户正在请求pdf(以某种方式自定义页面),则可以将用户id与令牌一起存储在数据库中
  • 我们正在寻找一种更好的方法来解决这个问题,但到目前为止,它对我们有效


    希望这有帮助。

    非常有帮助,谢谢。是的,在我的特殊情况下,我只使用了
    POST
    将用户名和密码重定向到重定向URL,但这仍然不能解决一般的cookie问题。@Giles Smith:你们有没有想过用wkhtmltopdf对pdf进行密码保护?你们做得对吗?我也在试着做同样的事情。我认为
    wkhtmltopdf
    wget
    curl
    使用的Netscape格式cookies不兼容。看,很遗憾我没有。我的黑客解决方案是在每个受密码保护的页面上发布登录信息。很抱歉
    $ wget -p --load-cookies cookies.txt sub.example.com/page.html
    $ wkhtmltopdf --cookie-jar cookies.txt sub.example.com/page.html page.pdf