我正在尝试使用pdfkit对我们公司的wiki进行可视化备份。我遇到了麻烦,因为该网站要求用户登录才能使用。我使用splinter开发了一个脚本,该脚本登录到公司wiki,但是当pdfkit执行时,它会返回登录页面。在这种情况下,PDFkit 必须打开不同的会话。我如何能够知道何时需要凭据(cookie(来访问我网站上的页面,并将它们保存为变量,以便我可以抓取这些屏幕截图?
我正在使用python 2.7.8碎片,请求和pdfkit
from splinter import Browser
browser = Browser()
browser.visit('https://companywiki.com')
browser.find_by_id('login-link').click()
browser.fill('os_username', 'username')
browser.fill('os_password', 'password')
browser.find_by_name('login').click()
import pdfkit
pdfkit.from_url("https://pagefromcompanywiki.com", "c:/out.pdf")
我还找到了以下脚本,它将登录并保存凭据,但我不确定如何将其与我正在尝试执行的操作联系起来。
import requests
import sys
EMAIL = ''
PASSWORD = ''
URL = 'https://company.wiki.com'
def main():
session = requests.session(config={'verbose': sys.stderr})
login_data = {
'loginemail': EMAIL,
'loginpswd': PASSWORD,
'submit': 'login',
}
r = session.post(URL, data=login_data)
r = session.get('https://pageoncompanywiki.com').
if __name__ == '__main__':
main()
关于如何完成此任务的任何想法,我们将不胜感激
当您使用 Splinterbrowser
登录时,该网站会向您发送 HTTP cookie,用于识别您的授权会话,并browser
记住它们以备进一步请求。
但是PDFKit对你的browser
一无所知。它只是将你给它的URL传递给底层的wkhtmltopdf工具,然后该工具使用自己的默认设置获取页面。
您需要做的是将cookie从browser
转移到wkhtmltopdf。值得庆幸的是,以这种方式连接Splinter和PDFKit很容易:
options = {"cookie": browser.cookies.all().items()}
pdfkit.from_url("https://pagefromcompanywiki.com", "c:/out.pdf", options=options)
您必须处理 cookie:
class CookieJar(cookielib.CookieJar):
def _cookie_from_cookie_tuple(self, tup, request):
name, value, standard, rest = tup
version = standard.get('version', None)
if version is not None:
version = version.replace('"', '')
standard["version"] = version
return cookielib.CookieJar._cookie_from_cookie_tuple(self, tup, request)
你也需要一个开瓶器
def getOpener(self):
handlers = []
cj = CookieJar();
cj.set_policy(cookielib.DefaultCookiePolicy(rfc2965=True))
cjhdr = urllib2.HTTPCookieProcessor(cj)
handlers.append(cjhdr)
return urllib2.build_opener(*handlers)
你会做类似的事情
urlHandle = self.getOpener().open(request)