2016-11-17 15 views
0

httpsウェブサイト(Salesforce)からウェブページのPDFを生成しようとしています。 私は今までsimple_salesforceを使ってみましたが、これはセッションID(クッキー)を返していません。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形式は、Webページのレイアウトを歪めていたので、内容はそこにありましたが、外観は全く異なります。ページの外観をよりよく保つ他のフォーマットについて知っていますか? –

+0

次に、同じ方法を使用しますが、BeautifulSoupを使用してください。 –

+0

美しいスープは、pdfkitに渡されたときにpdfkitと同じ問題が発生して、それ自体で認証プロセスを処理しようとしていないイメージへのリンクを返します。 –

1

私も同様の問題があります。私はgithub/documetationに高度なオプション設定があることに気付きました。そこでは、ユーザー名とパスワードと共にクッキーとcookiejarを渡すことができます。これはあなたが試したことのようですが、あなたが正しくクッキー名を設定しなかったようです。ここでは、「クッキー」オブジェクトのためにあなたはタプルとしてクッキーの名前と値を持つリストに合格する必要があると思わ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) 

からドキュメントです。私は私の例で動作するようにすることができたhavent、私は私のウェブページは、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 
} 
関連する問題