首页 存档 技术 查看内容

Docker环境下运行Python Selenium Chrome

2018-3-30 13:00 |来自: 互联网 385 0

摘要: Docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将Docker与Selenium结合实现在容器中执行无界面的自动化操作。例如:自动测试、自动下载邮件等。 需求说明通过Selenium自 ...

Docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将Docker与Selenium结合实现在容器中执行无界面的自动化操作。例如:自动测试、自动下载邮件等。


需求说明


通过Selenium自动的登录邮箱,下载邮箱中符合条件的邮件,并对邮件的内容进行解析存档。


方案选择


Selenium官方提供了基于selenium hub的方式来管理Selenium的node节点,提供了分布式的远程调度方案,可以为SeleniumGrid添加各种类型的WebDriver。



基于Selenium Grid的方案适用于以下场景:


  1. 通过Selenium自动访问网页时,需要阻塞等待与用户的交互,例如需要输入短信验证码的场景,通过Selenium Grid的调度,可以最优的利用所有可访问的资源,提高系统的并发执行效率。


  2. 需要对网页的兼容性进行测试时,可以接入多种内核的WebDriver到Selenium Grid中,这样在进行网页的自动化测试时,也同时对浏览器的兼容性进行了测试。


  3. 访问只支持IE内核的网站时,例如一些开发比较早的政府网站等。


  4. 访问需要安装安全控件的网站,例如网银的登录等。


本次的需求对时效性要求不高,邮件的获取需要由定时器进行触发,如果使用Selenium Grid,可能会增加了整个系统的复杂程度,分布式系统中每引入一个中间件,就会增加系统的复杂性,系统的可用性就会随之降低。


基于以上分析,考虑采用selenium handless的模式,在Docker中运行Chrome的WebDriver,完成最终邮件的自动获取。

在确定方案之后,需要寻找合适的Docker镜像,最终找到了chromium-xvfb这个镜像文件,集成了Chromium和Xvfb,可以满足在Docker容器中通过Selenium来进行无界面的操作。


方案验证


1. 下载chromium-xvfb的镜像文件


[root@prod ~]# docker pull markadams/chromium-xvfb-py2

2. 交互模式运行


[root@prod ~]# docker run --rm -it markadams/chromium-xvfb-py2 bash


3. 进入python环境


root@8016c66877aa:/usr/src/app# python

4. 输入以下python代码


from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://github.com/mark-adams/docker-chromium-xvfb/blob/master/samples/
python3/test_google.py'
driver.get(url)

没有错误输出,证明Chrome已经在Docker下可以正常工作。


参方案实施


以markadams/chromium-xvfb-py2作为基础镜像,重新编写的Dockerfile如下:


FROM markadams/chromium-xvfb-py2
WORKDIR /opt/zs5s/download-mail
COPY ./download-mail/.pip /root/.pip/
COPY ./download-mail/requirements.txt /opt/zs5s/download-mail/requirements.txt

RUN pip install --upgrade pip

RUN pip install -r requirements.txt
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部