我正在尝试使用pdfkit对我们公司的wiki进行可视化备份。我遇到了麻烦,因为网站要求用户登录才能使用。我使用splinter开发了一个脚本,该脚本登录到公司wiki,但是当pdfkit执行时,它会返回登录页面。在这种情况下,PDFkit必须打开一个不同的会话。我怎样才能找到访问我网站上的页面需要凭据(cookie)的时间,并将它们保存为变量以便我可以抓住这些屏幕截图?
我正在使用python 2.7.8 splinter,requests和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()
赞赏有关如何完成此任务的任何想法
答案 0 :(得分:2)
当您使用Splinter browser
登录时,该网站会向您发送标识您的授权会话的HTTP cookies,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)
答案 1 :(得分:0)
你必须处理cookies:
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)