使用 python:3.8.8-alpine3.13 的应用镜像,制作 selenium+chromium 的 docker 镜像,并设置中文支持。
DockerFile 内容如下:
FROM python:3.8.8-alpine3.13
ADD SourceHanSansCN-Normal.otf /usr/share/fonts/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk --no-cache add libexif udev xvfb xvfb-run gcc libffi-dev openssl-dev musl-dev chromium chromium-chromedriver
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && /usr/local/bin/python -m pip install --upgrade pip
RUN pip install selenium
RUN mkdir /data
WORKDIR /data
打包镜像:
build -t 'selenium:0.1' .
运行容器:
docker run -it --rm --name 'selenium' selenium:0.1.2 sh
这里需要注意的是中文字体的选择,字体添加到容器里面后,需要让容器能识别这是中文的字体,否则添加进去后,也无法在浏览器中显示中文。
我上面的添加的字体文件 SourceHanSansCN-Normal.otf 是思源黑体这个字体,可以使用 otf 后缀的字体文件。字体添加进去后执行查看是否为中文字体。(如果字体是镜像打包完后,运行容器时添加进去的,可能需要执行刷新:fc-cache -f ) 检查方法如下:
fc-list :lang=zh
查询示例如下: 可以看到有思源黑体的字体存在。
python 测试代码,保存为 test.py ,代码如下:
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--no-sandbox")
options.add_argument("window-size=1920,1080")
driver=webdriver.Chrome(options=options)
driver.get('http://www.baidu.com/')
time.sleep(5)
title=driver.title
print(title)
driver.save_screenshot('screenshot.png')
driver.close()
在容器中执行代码,并保存截图:
xvfb-run python3 test.py -s -screen 0 1920x1080x16
再把容器里的截图拷贝出来:
docker cp selenium:/data/screenshot.png .
在系统中查看 screenshot.png 图片,能正常显示中文字体:
|