采用Selenium、ChormeDriver和pdfkit生成网页的pdf

原理:

    使用Selenium + ChromeDriver打开页面, 拿到html 源码,然后再使用pdfkit生成pdf
 

概念:

    Selenium:Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样
    ChromeDriver:它是 google 为网站开发人员提供的自动化测试接口,是 selenium2 和 chrome浏览器 进行通信的桥梁
    wkhtmltopdf:它是一个适用于多平台的html到pdf转换的软件
    pdfkit:它是wkhtmltopdf的Python封装包
 

安装(Linux CentOS7)

 
1、安装wkhtmltopdf
 
1)在wkhtmltopdf的官网下载安装包
 
2)上传到linux服务器
scp wkhtmltox-0.12.6-1.centos7.x86_64.rpm [email protected]:~/soft/

3)安装

sudo rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm

报错:

错误:依赖检测失败:
    xorg-x11-fonts-75dpi 被 wkhtmltox-1:0.12.6-1.centos7.x86_64 需要

安装xorg-x11-fonts-75dpi:

sudo yum install xorg-x11-fonts-75dpi

再次安装:

sudo rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm

 
4)在/usr/local/bin/目录下可以看到安装了wkhtmltoimage 和 wkhtmltopdf
 
5)测试是否安装成功
wkhtmltopdf http://www.baidu.com ~/test.pdf

执行成功后,打开test.pdf,看到下面效果,说明安装成功

 
2、安装pdfkit
 
1)安装Python环境
    使用Anconada安装Python环境:
conda create --name python3.6.6 python=3.6.6

   进入Python 3.6.6环境(后续所有命令都是在此环境下操作):

source activate python3.6.6

2)安装pdfkit

pip install pdfkit

3)示例

import pdfkit

pdf_options = {
    'page-size': 'A4',
}

url = 'https://www.baidu.com/'

pdfkit.from_url(url, 'test.pdf', options=pdf_options)

打开test.pdf看到baidu页面,说明pdfkit安装成功

 
3、为什么要使用 Selenium + ChromeDriver
 
以上的方法仅适用于静态页,如果页面是动态加载出来的,使用以上方法会有问题,动态调用后端接口的部分会加载不出来
 
为了解决这个问题,可以使用Selenium + ChromeDriver打开页面,拿到页面源码,然后再使用pdfkit生成pdf
 
4、安装 ChromeDriver
ChromeDriver是依赖于Chrome运行的,所以需要先安装Chrome
 
1)安装Chrome
    请自行搜索
 
2)安装ChromeDriver
    ChromeDriver的版本号需要跟Chrome的版本号对应
    比如我的Chrome版本号为Google Chrome 86.0.4240.183,那么对应的ChromeDriver版本号也是86
    
 
    点击进入,查看notes.txt,可以看到这个版本的ChromeDriver对应的Chrome版本号    
    找到相应的系统版本下载:
    scp到服务器:
scp ~/Downloads/chromedriver_linux64.zip [email protected]:~/soft/

    解压:

unzip chromedriver_linux64.zip

    移动:

sudo mv chromedriver /usr/local/bin/chromedriver

    查看chromedriver版本:

chromedriver --version

    显示版本:ChromeDriver 86.0.4240.22

 
5、安装 selenium
pip install selenium

示例

代码示例:
 
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 = 'http://www.tn666.com/test?id=1'
driver.get(url)
# sleep 1秒
time.sleep(1)
source_text = driver.page_source

options_pdf = {
    'page-size': 'A4'
}
result = pdfkit.from_string(source_text, 'test.pdf', options=options_pdf)

driver.quit()

请将url转换为您想转为pdf的url

更多内容,请扫码关注~

猜你喜欢

转载自blog.csdn.net/tunan666/article/details/111601597