使用pdfkit生成網頁的pdf 異常彙總

2021-10-13 07:29:21 字數 3548 閱讀 1362

1. 採用selenium、chormedriver和pdfkit生成網頁的pdf

2. 使用pdfkit生成網頁的pdf 異常彙總(本文)

**示例:

import pdfkit, time, pprint

from selenium import webdriver

options_chrome = webdriver.chromeoptions()

# 以最高許可權執行

options_chrome.add_argument('--no-sandbox')

# 瀏覽器不提供視覺化頁面,linux下如果系統不支援視覺化不加這條會啟動失敗

options_chrome.add_argument('--headless')

# executable_path為chromedriver的位置

driver = webdriver.chrome(executable_path='/usr/local/bin/chromedriver', chrome_options=options_chrome)

# 瀏覽器全屏

driver.fullscreen_window()

url = ''

driver.get(url)

# sleep 1秒

time.sleep(1)

source_text = driver.page_source

options_pdf =

result = pdfkit.from_string(source_text, 'test.pdf', options=options_pdf)

driver.quit()

詳細報錯資訊:

traceback (most recent call last):file "pdfkit_selenium_test.py", line 25, inresult = pdfkit.from_string(source_text, '/home/tn/code/python/test.pdf', options=options_pdf)file "/home/tn/anaconda3/envs/python3.6.6/lib/python3.6/site-packages/pdfkit/api.py", line 72, in from_stringreturn r.to_pdf(output_path)file "/home/tn/anaconda3/envs/python3.6.6/lib/python3.6/site-packages/pdfkit/pdfkit.py", line 156, in to_pdfraise ioerror('wkhtmltopdf reported an error:\n' + stderr)oserror: wkhtmltopdf reported an error:
報錯原因:引用的外部資源載入不到

解決:獲取頁面原始碼後,外部資源增加host網域名稱,使之可以載入,然後再生成pdf,比如:

source_text = source_text.replace('/static/js/index.js', '')
詳細報錯資訊:

(unknown error: devtoolsactiveport file doesn't exist)(the process started from chrome location /usr/bin/google-chrome is no longer running, so chromedriver is assuming that chrome has crashed.)
現象:

ps aux | grep google-chrome有幾十個程序

臨時解決辦法:

google-chrome程序只剩乙個,其他的全部殺掉後,執行程式沒有問題了

q&a:

每次執行程式都啟動乙個新程序,如何指令碼結束後,自動把程序殺掉?

解決辦法:

**中用的是 driver.quit(),先說一下driver.quit()和driver.close()的區別:

driver.close():只會關閉當前頁面

driver.quit():會退出驅動並且關閉所關聯的所有視窗

通過selenium.webdriver.chrome.service中的service來控制chromedriver程序的生死

**示例:

import pdfkit, time, pprint

from selenium import webdriver

from selenium.webdriver.chrome.service import service

service_driver = service('/usr/local/bin/chromedriver')

service_driver.command_line_args()

service_driver.start()

options_chrome = webdriver.chromeoptions()

# 以最高許可權執行

options_chrome.add_argument('--no-sandbox')

# 瀏覽器不提供視覺化頁面,linux下如果系統不支援視覺化不加這條會啟動失敗

options_chrome.add_argument('--headless')

driver = webdriver.chrome(chrome_options=options_chrome)

# 瀏覽器全屏

driver.fullscreen_window()

url = ''

driver.get(url)

# sleep 1秒

time.sleep(1)

source_text = driver.page_source

options_pdf =

result = pdfkit.from_string(source_text, 'test.pdf', options=options_pdf)

driver.quit()

service_driver.stop()

現象:生成的pdf為帶loading狀態的空白頁

原因:頁面未載入出來時,生成了pdf

解決:優化頁面載入速度,或者driver.get後,time.sleep加長,再去獲取原始碼driver.page_source

現象:生成的pdf為空白頁,把driver.page_source列印出來,再生成html頁面,也是空白頁

原因:其中的某些js可能會重置頁面,把頁面重置為空了

解決:逐個嘗試把js替換為空,看看頁面是否會載入出來 

請將**中的url換為您想轉為pdf的url

使用pd 進行資料的反向工程

建立資料來源 建立反向 但是安裝完成之後就會出現安裝 主要是因為建立的資料來源是32位的。反正只要是遇見這個問題就是說明你建立的資料來源和你鏈結資料來源的軟體的位數是不同的,所以是不能鏈結的 所以說要對乙個資料庫配置兩個資料來源,乙個32位乙個64位,這樣的話,就都可以鏈結了。要想在配置資料來源的地...

使用PD的一點心得

這一段時間以來 在開發乙個公司內部使用的 報障系統 由於一直感覺自已在系統分析方面的能力較差 所以 一直以來 都有在看一些有前軟體工程方面的書本 也學習了一些uml相關的知識。為了檢驗自已前段時間的學習成果 就在新的案子中用軟體工程的方法來開發這個系統 我選用的case 工具 就powerdesin...

PHP生成便於列印的網頁

很多新聞和資訊站點都提供了一種生成便於列印的網頁的方法,所產生的頁面的排版布局更有利於印表機的列印輸出,這種方法方便了我們從網頁上直接列印我們所需的內容,而不必為格式不規整傷腦筋,或者貼上到文字編輯器中重新排版。然而,我卻沒看到有多少 詳細解釋這些是如何實現的,在這裡我提供一小段 用php來實現生成...