在会话中保存凭证
Save Credentials in a Session
我正在尝试使用 pdfkit 对我们公司的 wiki 进行可视化备份。我 运行 遇到麻烦了,因为该网站要求用户登录才能使用。我使用 splinter 开发了一个登录公司 wiki 的脚本,但是当 pdfkit 执行时,它 returns 登录页面。在这种情况下,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()
如有任何关于如何完成此任务的想法,我们将不胜感激
您必须处理 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)
当您使用 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)
我正在尝试使用 pdfkit 对我们公司的 wiki 进行可视化备份。我 运行 遇到麻烦了,因为该网站要求用户登录才能使用。我使用 splinter 开发了一个登录公司 wiki 的脚本,但是当 pdfkit 执行时,它 returns 登录页面。在这种情况下,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()
如有任何关于如何完成此任务的想法,我们将不胜感激
您必须处理 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)
当您使用 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)