Linux环境下Selenium截图乱码及字体安装及与字符集区别

概述

参考Java实现HTML页面截图功能,在使用Selenium对HTML页面进行截图时,一段没有任何问题的代码,在Windows环境下执行成功,但放到使用很久的测试环境Linux服务器也没有问题,但是部署到刚申请不久的阿里云生产Linux服务器里,截图效果如下:
在这里插入图片描述
初一看一脸懵逼,怎么会这个样子?

此时如果冷静下来思考问题,10分钟即可解决。就怕像是无头苍蝇一样,尝试各种乱七八糟的解决方案,却始终没有找到问题的根源。

上图,乍一看,就能发现字体显示异常,上面那个中文字体显示正常,是因为那是一个图片。

事后想想,真是笨死,花了3个小时折腾尝试的解决方案包括但不限于:

  1. 更新ChromeDriver版本号
  2. 增加ChromeOptions参数
  3. 安装X11,尝试从ssh终端打开Chrome浏览器,验证展示效果的想法
  4. Selenium的API,getScreenshotAs三种存储方式:File,String,byte

安装字体

CentOS8安装宋体,执行命令:
yum -y install fontconfig

yum会检查系统是否已经安装此命令,如果安装则忽略。

安装成功后,在/usr/share目录就可看到fontsfontconfig目录,

在windows本机字体库找到需要安装的中文字体simsun.tcc,使用search everything高效搜索。

如果不存在/usr/share/fonts/chinese目录,则执行命令先创建:
cd /usr/share/fonts
mkdir -p chinese
cd chinese

simsun.tcc上传到/usr/share/fonts/chinese,并修改权限:
chmod -R 755 /usr/share/fonts/chinese

安装ttmkfdir
yum -y install ttmkfdir

使用ttmkfdir搜索目录中所有的字体信息,并汇总生成fonts.scale文件:
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir

修改字体配置文件vi /etc/fonts/fonts.conf,添加:
<dir>/usr/share/fonts/chinese</dir>

效果如下图:
在这里插入图片描述
:wq保存并退出。

刷新内存中的字体缓存,则无需reboot重启:
fc-cache

字符集

另外字体和字符集是两码事,个人理解,字体是X11等GUI应用为了展示效果需要安装;而字符集则是控制台显示效果需要安装,默认是英文。
默认情况下,ssh控制台(或者叫终端)的显示是英文:
在这里插入图片描述
执行命令:
yum install glibc-common
yum install -y langpacks-zh_CN

修改默认展示的字符集:
vim /etc/locale.conf

LANG=en_US.UTF-8修改为LANG=zh_CN.utf8,并保存退出。

使之生效:
source /etc/locale.conf

展示效果变为:
在这里插入图片描述

参考

centos 安装字体
centos8上安装中文字符集

posted @ 2021-06-10 21:56  johnny233  阅读(85)  评论(0编辑  收藏  举报  来源