【问题标题】:How to use requests.cookies in pdftkit/wkhtmltopdf?如何在 pdfkit/wkhtmltopdf 中使用 requests.cookies?
【发布时间】:2017-06-16 13:48:14
【问题描述】:

我喜欢使用 pdfkit 打印我的 mediawikipage 的 pdf 版本。 我的 mediawiki 需要有效登录才能查看任何页面。 我使用requests 登录到 mediawiki,这很有效,我得到了一些 cookie。但是,我无法将这些 cookie 与 pdfkit.from_url() 一起使用

我的 python 脚本如下所示:

#!/usr/bin/env python2
import pdfkit
import requests
import pickle

mywiki          = "http://192.168.0.4/produniswiki/"# URL 
username        = 'produnis'                        # Username to login with
password        = 'seeeecret#'                      # Login Password
## Login to MediaWiki
# Login request
payload = {'action': 'query', 'format': 'json', 'utf8': '', 'meta': 'tokens', 'type': 'login'}
r1 = requests.post(mywiki + 'api.php', data=payload)

# login confirm
login_token = r1.json()['query']['tokens']['logintoken']
payload = {'action': 'login', 'format': 'json', 'utf8': '', 'lgname': username, 'lgpassword': password, 'lgtoken': login_token}
r2 = requests.post(mywiki + 'api.php', data=payload, cookies=r1.cookies)
print(r2.cookies)

所以,到这里我就成功登录了,并且cookies存储在r2.cookies中。 print() 命令给出:

<RequestsCookieJar[<Cookie produniswikiToken=832a1f1da165016fb9d9a107ddb218fc for 192.168.0.4/>, <Cookie produniswikiUserID=1 for 192.168.0.4/>, <Cookie produniswikiUserName=Produnis for 192.168.0.4/>, <Cookie produniswiki_session=oddicobpi1d5af4n0qs71g7dg1kklmbo for 192.168.0.4/>]>

我可以将 cookie 保存到文件中:

def save_cookies(requests_cookiejar, filename):
    with open(filename, 'wb') as f:
        pickle.dump(requests_cookiejar, f)
save_cookies(r2.cookies, "cookies")

此文件如下所示:http://pastebin.com/yKyCpPTW

现在我想使用 pdfkit 将特定页面打印成 PDF。手册页指出,可以通过 cookie-jar 文件设置 cookie:

options = {
    'page-size': 'A4',
    'margin-top': '0.5in',
    'margin-right': '0.5in',
    'margin-bottom': '0.5in',
    'margin-left': '0.5in',
    'encoding': "UTF-8",
    'cookie-jar' : "cookies",
    'no-outline': None
}
current_pdf = pdfkit.from_url(pdf_url, the_filename, options=options)

我的问题是: 使用此代码,“cookies”文件变为 0KB,PDF 声明“您必须登录才能查看页面...”

所以我的问题是:

如何在 pdfkit.from_url() 中使用 requests.cookies?

【问题讨论】:

    标签: python-2.7 wkhtmltopdf mediawiki-api pdfkit


    【解决方案1】:

    我遇到了同样的问题,并通过以下方法解决了它:

    import requests, pdfkit
    
    # Get login cookie
    s = requests.session()  # if you're making multiple calls
    data = {'username': 'admin', 'password': 'hunter2'}
    s.post('http://example.com/login', data=data)
    
    # Get yourself a PDF
    options = {'cookie': s.cookies.items(), 'javascript-delay': 1000}
    pdfkit.from_url('http://example.com/report', 'report.pdf', options=options)
    

    根据您尝试加载的 javascript 数量,您可能希望将 javascript-delay 设置为更高或更低的值;默认为 200 毫秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多