requests模擬登錄(基礎向)以及打印成pdf時使用pdfkit時出現的一些問題

需求時這樣的:學校有一個判題網,當期末的時候要把提交的結果一頁一頁的打印成pdf交給老師
因爲是內網,模擬登錄十分簡單我就簡單寫一下,但是我在使用pdfkit時出現了一些問題(強迫症問題),最終也沒找到很好的解決方法,如果有dalao有想法懇請告訴 - -!

環境:

python3.6
涉及的庫:
requests
pdfkit
re
1.模擬登錄
在這裏插入圖片描述
登錄的url如上 我們關注hearder裏最後幾個就行,先構造出來header

header={
'uer-aGent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0',
'Referer':'http://**.***.***.***/',
'Host':'**.***.***.***'
}

在這裏插入圖片描述
這是需要post的參數,第一個參數csrfmid…啥的我們發現就是cookie中的一個

接下來我們來講講如何獲取cookie,因爲是學生自己用的,驗證很low,我們先通過requests.Session()獲得一個session(這裏不懂的強烈建議先去搞懂Session和Cookie),我們先通過session.get()先嚐試登錄一下,因爲我們沒有提交任何表單數據,毫無疑問是失敗的,但是我們卻因此獲得了cookie,具體看代碼,十分簡單

import requests
import re
import time
import pdfkit

postdata={
'password':'******',
'username':	'*******'
}
session = requests.Session()
#登錄
def Getcookiesandlogin():
    posturl = 'http://**.***.***.***/user/logincheck/'
    session.get('http://**.***.***.***/',headers=header)#通過這次來獲取cookie
    postdata['csrfmiddlewaretoken']=session.cookies.get_dict()['csrftoken']#把cookie加入表單參數中
    session.post(posturl, data=postdata,headers=header)

2.pdfkit
pdfkit依賴於wkhtmltopdf,鏈接爲下載地址,我下的是windos的MXE (MinGW-w64),直接解壓就行,使用的時候設置一下路徑參數就ok

path='E:/wkhtmltopdf/wkhtmltox/bin/wkhtmltopdf.exe'#你解壓後的路徑
config = pdfkit.configuration(wkhtmltopdf=path)

先說最後都沒有解決的問題吧,看兩幅圖片的對比
1.
在這裏插入圖片描述
2.在這裏插入圖片描述
emmm,就是空白(紅框圈出),打印pdf的時候會出現空白,而且這些空白是有些pdf有,有些pdf沒有的,而這些空白也不僅僅是出現在頁與頁的分隔之間。。。
只截取關於pdfkit的一段代碼吧(這是最後的)

        text=session.get(url)
        css=['E:\Pycharm\MyProjects\monidenglupanti\css\shCore.css','E:\Pycharm\MyProjects\monidenglupanti\css\shThemeDefault.css',
             'E:\Pycharm\MyProjects\monidenglupanti\css\global.css','E:\Pycharm\MyProjects\monidenglupanti\css\group.css',
             'E:\Pycharm\MyProjects\monidenglupanti\css\printstyle.css']
        name=re.findall(r'<title>(.*) </title>',text.text)[0].replace(' ','')
        name=name.replace(':','_')
        path='E:/Pycharm/MyProjects/monidenglupanti/'+name+'.pdf'
        h=text.text.replace('/js/media/js/scripts/','js/')
        h = text.text.replace('/js/media/js/', 'js/')
        #這裏外鏈的路徑變成‘C:\Users\76083\AppData\Local\Temp\’,改成其他路徑失效,沒解決- -!
        pdfkit.from_string(h,output_path=path,configuration=config,css=css)

苦逼歷程:
1.一開始,發現打印的pdf沒有樣式,好,把網頁的樣式下載下來,添加進去,
後來發現,打印出來的pdf還是有些小地方不一樣,想破腦袋,此處省略萬字。。。
2.突然想到有些應該是javascript動態生成的!好,咱再把他也全部下載下來
(下載方法:Internet選項-常規-先點刪除-選擇臨時文件(全清了也ok就當清理垃圾了)-刪除後刷新一下你要下載的網頁-再點設置-再點查看文件,好,裏面就全是這個網站的css和js文件了)。
3.然後加載javascritpt,把網頁中js的相對路徑改成我需要的覺得路徑,發現又發現設置其他盤無用(它還是會ignore)只能設置在‘C:\Users\76083\AppData\Local\Temp\’???算了,屈服
4.滿心歡心運行效果,樣式啥的全對了,看到空白,強迫症卒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章