最近在下班后学习用代码操作浏览器,遇到一个需要在浏览器播放视频的场景,在本地调试完成后,将代码放到服务器运行,发现在一段时间后,便卡在了某个地方,由于代码打印日志的不充分,并无法知道具体的位置。
添加相关节点的日志打印,发现是卡在了播放视频的节点,很好奇,由于是无头模式并不能观察到页面的状态,随之调整代码,将视频页的html源码输出到文件,确实和本地拿到的页面数据是不相同的,提示“暂不支持HTML5视频播放,请升级浏览器”,浏览器还不能播放视频?
找到源镜像文件,发现了下面这一段代码
也就是说,源镜像是使用的Chromium来构建的,Chromium是由Google主导开发的网页浏览器。以BSD许可证等多重自由版权发行并开放源代码,也就是说它是开源的。
在互联网上找到类似的案例,问题都指向一个原因:因为它是开源的,而解码器通常都是有专利的,例如H.264,因此开源产品并不会去使用。
找到问题原因了,那么现在摆在我面前有两个思路:
- 1.尝试在chromium添加解码器
- 2.使用chrome来构建镜像
在我的首选方案中,我仍然是倾向于第一种的,docker镜像小,只占用300多m空间,因此便去寻找解决方案,找了一圈无法解决,那就只能使用方案二了,好处是和本地调试使用相同的浏览器,应该不会存在差异性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
FROM debian:stable-slim
RUN set -x && \
apt update && \
apt upgrade -y && \
apt install -y wget curl gnupg unzip libappindicator1 fonts-liberation locales fonts-noto-cjk && \
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \
wget -qO - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
apt update && \
apt install -y google-chrome-stable && \
rm -rf /var/lib/apt/lists/ && \
apt-get autoremove -y && \
apt-get autoclean -y && \
echo "ja_JP UTF-8" > /etc/locale.gen && \
locale-gen
EXPOSE 9222
ENV LANG=ja_JP.utf8
CMD ["google-chrome-stable", "--headless", "--no-sandbox", "--remote-debugging-port=9222", "--remote-debugging-address=0.0.0.0", "--lang=ja_JP", "https://www.google.com/"]
|
经过了几版更新,空间占用仍然比较高,938M,接下来还要研究下如何减少镜像的大小。
已经发布到Docker中心仓库:https://hub.docker.com/r/srcrs/real-chrome-stable/tags ,可以直接下载最新的镜像。
1
|
docker pull srcrs/real-chrome-stable:latest
|
参考链接: