2016-11-17 91 views
0

我试图从https网站(Salesforce)生成网页的PDF。 我到目前为止尝试过使用simple_salesforce,它返回一个sessionID(cookie)无济于事。创建需要使用pdfkit登录的https网页的PDF

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的最佳方式是什么?

回答

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") 
+0

脚本中有一些拼写错误,但在修复它们之后,这个东西起作用了,但只是有点。显然,从request.get调用生成的html格式扭曲了网页的布局,因此虽然内容在那里,但外观却完全不同。你知道任何其他格式能更好地保持页面的外观吗? –

+0

然后,您应该使用相同的方法,但使用BeautifulSoup。 –

+0

美丽的汤将链接返回到图像,当传递给pdfkit时,会遇到同样的问题,pdfkit不会自己处理验证过程。 –

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名称和值元组列表来传递。我没有能够得到它在我的例子上工作,我想是因为我的网页使用了很多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 
}