wkhtmltoimage(网页剪切功能)

1.wkhtmltoimage使用wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2版本,最新版本为wkhtmltoimage-0.11.0_rc1-static-amd64.tar.bz2。

2.解压wkhtmltoimage,更改用户,组

# mkdir /usr/local/wkhtmltoimage
# cp wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2 /usr/local/wkhtmltoimage
# cd /usr/local/wkhtmltoimage
# tar xvf wkhtmltoimage-0.10.0_rc2-static-amd64.tar.bz2  //可以看到解压后只有wkhtmltoimage-amd64一个可执行文件
# mv wkhtmltoimage-amd64 wkhtmltoimage
# chown root.root wkhtmltoimage  //更改用户,组

3.使用wkhtmltoimage将html页面输出成jpg

# ./wkhtmltoimage  gaingreat.com /tmp/gain.jpg  ///tmp/gain.jpg指定输出图像位置,名称,可以是.png等格式
 
附录:
./wkhtmltoimage-amd64 gaingreat.com gain.jpg时出现Gtk-WARNING **: cannot open display: 
Loading page (1/2)
[==============================> ] 51%
(:18608): Gtk-WARNING **: cannot open display:
因为我是用secureCRT ssh到这台机子上的,好像说是图像无法传送过来。直接到那台机子上试就没问题。参照网上的
# export DISPLAY=:0.0 //设置DISPLAY环境变量, 运行图形程序(如xclock)时会收到如下错误:
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Error: Can't open display: :0.0
这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图形显示在当前屏幕上, 则应以当前登陆的用户, 也就是切换身份前的用户执行如下命令
# xhost +  //这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上
xhost:  unable to open display "0:0"
还是不行,后来看到说/etc/sshd/sshd_config ForwardX11默认是no,改为yes就可以了。
# vim /etc/sshd/sshd_config //修改ForwardX11为yes,其它不用动
ForwardX11 yes
# /etc/init.d/sshd restart //重启sshd即可

4.解决中文问题

找了 windows 里的宋体 simsun.ttc
上传到服务器 /usr/share/fonts/ 里
/usr/share/fonts/chinese/TrueType/simsun.ttc
安装这个 wkhtmltopdf 模块后,里面包含了 wkhtmltoimage 命令了!

5.测试脚本

xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltoimage "$@"
测试命令
./wkhtmltoimage.sh http://www.baidu.com baidu.jpg

相关推荐:

如何在 Tkinter Canvas 中实现循环动画的暂停与继续功能

本文介绍如何使用after()方法替代for循环,在Tkinter中实现Canvas(或任意控件)上图像/内容轮播的可响应式暂停/恢复控制,避免time.sleep()导致界面冻结的问题。 本文介绍如何使用`after()`方法替代`for`循环,在tkinter中实现canvas(或任意控件)上图...

如何使用Python Pandas从网页HTML中抓取表格数据?

pd.read_html()是解析网页表格的最简路径,但对嵌套table、JS渲染、colspan/rowspan过多等结构敏感;遇JS渲染需用Playwright等待DOM加载后再解析;应显式指定header、skiprows并清理列名,同时设置超时、缓存HTML、捕获具体异常以保障稳定性。 用p...

如何使用Python Selenium处理网页中的iframe框架?

iframe切换失败的典型表现是页面有iframe但找不到子元素、click()无反应、send_keys()无效;根本原因是Selenium默认只操作顶层文档,需显式切换上下文。 直接操作iframe内的元素一定会失败,因为WebDriver默认只在顶层文档中查找DOM;必须先用switch_to...

如何在 QGraphicsView 中实现平移与缩放功能并保持状态不丢失

本文介绍如何为实时更新的相机图像显示控件(qgraphicsview)添加稳定、可持久化的缩放和平移功能,解决图像刷新后缩放重置的问题,并确保缩放以鼠标位置为中心。 本文介绍如何为实时更新的相机图像显示控件(qgraphicsview)添加稳定、可持久化的缩放和平移功能,解决图像刷新后缩放重置的问题...

如何在Python中实现Excel的VLOOKUP功能_通过merge函数的left连接

pd.merge()比VLOOKUP更可靠,因它精确匹配、自动处理数据类型差异、支持多条件查找、保留左表全部行并填NaN,且能校验键唯一性与追踪匹配状态。 为什么用pd.merge()做VLOOKUP更可靠 直接用pd.merge()的how='left'模式,比手写循环或map()查表更稳定,尤其...

如何在 Pyrogram 中正确实现频道选择请求功能

Pyrogram不支持直接通过KeyboardButtonRequestPeer请求用户频道,该类属于底层rawAPI,需配合client.invoke()使用;教程将演示标准、安全的替代方案及常见错误规避方法。 pyrogram不支持直接通过`keyboardbuttonrequestpeer`请...