+
85
-

回答

在 CentOS 环境中使用 Python+Selenium 时,网页字体显示不正确是一个常见问题,这通常是因为系统缺少必要的字体文件。以下是解决方案:1. 安装常用中文字体

首先,安装一些常用的中文字体包:

sudo yum install -y wqy-microhei-fonts wqy-zenhei-fonts cjkuni-uming-fonts
2. 安装更多字体

如果上述字体不足以解决问题,可以安装更多字体:

# 安装所有可用的字体包
sudo yum install -y xorg-x11-fonts-*

# 安装 Google Noto 字体(包含广泛的语言支持)
sudo yum install -y google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts
3. 手动安装 Windows 字体

如果网页使用的是 Windows 特有的字体(如微软雅黑、宋体等),可以手动从 Windows 系统复制这些字体:

# 创建字体目录
sudo mkdir -p /usr/share/fonts/windows

# 将字体文件复制到该目录(需要先从 Windows 系统获取字体文件)
# 例如:sudo cp /path/to/msyh.ttf /usr/share/fonts/windows/

# 设置权限
sudo chmod 644 /usr/share/fonts/windows/*

# 更新字体缓存
sudo fc-cache -fv
4. 在 Selenium 中设置字体渲染选项

在 Selenium 代码中添加特定的 Chrome 选项来改善字体渲染:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--font-render-hinting=none")  # 禁用字体微调
chrome_options.add_argument("--disable-gpu")  # 禁用 GPU 加速
chrome_options.add_argument("--force-device-scale-factor=1")  # 强制缩放因子

# 如果使用无头模式
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(options=chrome_options)
5. 使用字体替换

如果特定字体无法获取,可以使用 CSS 来强制替换网页中的字体:

# 在页面加载后执行 JavaScript 来替换字体
driver.execute_script("""
document.body.style.fontFamily = "WenQuanYi Micro Hei, sans-serif";
var all = document.getElementsByTagName("*");
for (var i=0; i<all.length; i++) {
    all[i].style.fontFamily = "WenQuanYi Micro Hei, sans-serif";
}
""")
6. 检查字体是否正确安装

可以使用以下命令检查系统中已安装的字体:

fc-list :lang=zh

这将列出所有支持中文的字体。

7. 重启字体服务

安装新字体后,确保重新加载字体缓存:

sudo fc-cache -fv

通过以上步骤,应该能够解决 CentOS 中 Selenium 网页字体显示不正确的问题。如果问题仍然存在,可能需要检查具体的网页使用了哪些特殊字体,并针对性地安装这些字体。

网友回复

我知道答案,我要回答