2016-12-20 8 views
0

Мне нравится печатать pdf-версию моего mediawikipage с помощью pdfkit. Моя MediaWiki требует действительного входа в систему, чтобы просмотреть любые страницы. Я заходил в mediawiki, используя requests, и это работает, и я получаю куки. Тем не менее, я не в состоянии использовать эти куки с pdfkit.from_url()Как использовать request.cookies в pdftkit/wkhtmltopdf?

Мой питон-скрипт выглядит следующим образом:

#!/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) 

Итак, здесь я успешно вошли в систему, и печенье хранятся в r2.cookies. Печать() - команда выдает:

<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/>]> 

Я могу сохранить куки в файл:

Этот файл выглядит следующим образом: http://pastebin.com/yKyCpPTW

Теперь я хочу, чтобы напечатать определенный страницы в PDF, используя pdfkit. Manpage состояния, что куки могут быть установлены с помощью печенья баночки файла:

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) 

Моя проблема заключается в: с этим кодом, то «куки» файл становится 0Kb и PDF государства «Вы должны войти в систему для просмотра страница ...»

Так что мой вопрос:

Как я могу использовать requests.cookies в pdfkit.from_url()?

ответ

0

Я была такая же проблема и преодолел его следующим образом:

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 мс.