创建需要使用pdfkit登录的https网页的PDF

时间:2016-11-17 00:45:51

标签: python python-3.x pdfkit

我正在尝试从https网站(Salesforce)生成网页的PDF。 到目前为止,我尝试使用simple_salesforce,它返回一个sessionID(cookie)无效。

from simple_salesforce import Salesforce
import pdfkit

sf = Salesforce(username='my username'
            ,password='my password'
            ,security_token= 'my API security token')

path_wkthmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=bytes(path_wkthmltopdf, 'utf8'))
options1 = {
    'page-size': None,
    'margin-top': None,
    'margin-right': None,
    'margin-bottom': None,
    'margin-left': None,
    'encoding': None,
    'custom-header' : None, 
    'cookie': sf.session_id,
    'no-outline': None
}
pdfkit.from_url('https://thiess.my.salesforce.com/0069000000IZH71','out.pdf', 
                configuration=config, options=options1)

任何人都知道将cookie参数传递给pdfkit的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

检查这个:)你可能需要请求,如果你没有。我对salesforce库一无所知。

import requests
import pdfkit

session = requests.session()


def download(session,username,password):
    session.get('https://bneadf.thiess.com.au/adfs/ls/')

    ua = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
    session.headers = {'User-Agent': self.ua}
    payload = {'UserName':username,
        'Password':password,
        'AuthMethod':'FormsAuthentication'}

    session.post('https://bneadf.thiess.com.au/adfs/ls/', data = payload, headers = session.headers)
    my_html = session.get('https://thiess.my.salesforce.com/0069000000IZH71')
    my_pdf = open('myfile.html','wb+')
    my_pdf.write(my_html.content)
    my_pdf.close()

    path_wkthmltopdf = 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
    config = pdfkit.configuration(wkhtmltopdf=bytes(path_wkthmltopdf, 'utf8'))


    pdfkit.from_file('myfile.html', 'out.pdf')

download(session,"yourusername","yourpass")

答案 1 :(得分:1)

我也有类似的问题。我注意到github / documetation上有一个高级选项设置,您可以在其中传递cookie和cookiejar以及用户名和密码。我知道这似乎是你尝试过的东西,但看起来你没有正确设置cookie名称。以下是https://github.com/JazzCore/python-pdfkit

的文档
options = {
  'page-size': 'Letter',
  'margin-top': '0.75in',
  'margin-right': '0.75in',
  'margin-bottom': '0.75in',
  'margin-left': '0.75in',
  'encoding': "UTF-8",
  'custom-header' : [
      ('Accept-Encoding', 'gzip')
  ]
  'cookie': [
      ('cookie-name1', 'cookie-value1'),
      ('cookie-name2', 'cookie-value2'),
  ],
  'no-outline': None
}

pdfkit.from_url('http://google.com', 'out.pdf', options=options)

对于'cookie'对象,您需要传入一个包含cookie名称和值作为元组的列表。我没有能够让它在我的例子上工作,我想因为我的网页使用了很多javascript / css。但是,使用Attila提到的请求方法,您可以使用salesforce登录执行某些操作吗?

cookie_list = session.cookies.items()

然后再试一次你的例子?

options1 = {
  'page-size': None,
  'margin-top': None,
  'margin-right': None,
  'margin-bottom': None,
  'margin-left': None,
  'encoding': None,
  'custom-header' : None, 
  'cookie': cookie_list,
  'no-outline': None
}

答案 2 :(得分:1)

要在Django中使用pdfkit访问受保护的视图,只需在from_url()函数调用中传递cookie。

cookie_list = request.COOKIES
# pass the cookies. You can add whatever other options you want to use
options = {
        'cookie' : [
            ('csrftoken', cookie_list['csrftoken']),
            ('sessionid', cookie_list['sessionid']),
            ]
        }

# Generate the pdf
pdf = pdfkit.from_url(url_to_page,False, options=options)

我也很难过,因为仅仅传递cookie字典是行不通的。