代码之家  ›  专栏  ›  技术社区  ›  user8162541

在会话中保存凭据

  •  2
  • user8162541  · 技术社区  · 8 年前

    我正在尝试使用pdfkit对我们公司的wiki进行可视化备份。我遇到了麻烦,因为该网站需要用户登录才能使用。我使用Spliter开发了一个脚本,该脚本登录到公司wiki,但当pdfkit执行时,它返回登录页面。在这种情况下,PDFkit必须打开另一个会话。我如何才能找出何时需要凭据(cookies)来访问我网站上的页面,并将其保存为变量,以便抓取这些屏幕截图?

    我正在使用python 2.7.8 Spliter、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()
    

    任何关于如何完成这项任务的想法都将不胜感激

    2 回复  |  直到 8 年前
        1
  •  1
  •   Vasiliy Faronov    8 年前

    当你用Splinter登录时 browser ,网站发送给您 HTTP cookies 识别您的授权会话,以及

    但是PDFKit对你的 浏览器 wkhtmltopdf

    您需要做的是从 浏览器 到wkhtmltopdf。谢天谢地,Splinter和PDFKit很容易通过这种方式连接:

    options = {"cookie": browser.cookies.all().items()}
    pdfkit.from_url("https://pagefromcompanywiki.com", "c:/out.pdf", options=options)
    
        2
  •  -1
  •   loretoparisi    8 年前

    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)
    
    推荐文章