添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
慷慨的高山  ·  android - Return a ...·  2 年前    · 
温文尔雅的花生  ·  npm - How to fix the ...·  2 年前    · 
耍酷的骆驼  ·  解决 selenium ...·  2 年前    · 

无论是测试还是爬虫的一些工作,有时候都会用到selenium去对chrome执行自动化操作,这里介绍一下如何使用docker快捷方便的部署相关应用。

1. selenium+chrome镜像

通过 docker search selenium 我们发现,有一个docker镜像叫做 selenium/standalone-chrome
看名字应该是包含了selenium和chrome,按照之前的方式我们是在本机上直接调用webdriver控制chrome,而在虚拟机上我们可以使用 远程调用
先翻一下
官方文档 ,发现有两种启动方式:

$ docker run -d -p 4444:4444 -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-dubnium
$ docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome:3.141.59-dubnium

这里看到镜像名称后面有标签,如果pull的是latest版本的话那么可以忽略。

2. 启动selenium+chrome服务

现在我们测试启动selenium+chrome服务。
执行下面的语句启动容器:

docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome

这里容器暴露了一个4444端口用于连接,使用一下python代码(命名为spider.py)连接selenium服务,生成webdriver:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
    command_executor="http://127.0.0.1:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
driver.get("http://www.baidu.com")
print(driver.title)
driver.close()

执行前要确保python3环境中安装了selenium

pip install selenium

然后执行代码,返回以下结果说明访问容器成功:

百度一下,你就知道

3. 使用python镜像

现在我们还在本机上执行python代码,有时候也足够了,如果想要在docker上一键部署python+selenium+chrome的话,请继续往下面看。
先pull一个alpine3.6版本的python镜像:

docker pull python:alpine3.6

然后根据我们的需求,定制一下这个python镜像,这里我们在里面安装好selenium就行了,所以编写如下的Dockerfile:

FROM python:alpine3.6
RUN pip install selenium

构建名为selenium_python的新镜像:

docker build . -t selenium_python:v1

4. 编写docker-compose文件

要同时部署python脚本和selenium-chrome,docker-compose当然是首选。
docker-compose并非docker的自带工具,因此执行如下命令安装:

sudo apt-get install docker-compose

根据需求编写docker-compose文件:

version: "2.0"
services:
  spider:
    image: selenium_python:v1
    volumes:
      - ./spider.py:/code/spider.py  # 这里把刚刚的代码映射到这个目录
    command: python /code/spider.py  # 定义启动容器执行的命令
    depends_on:
      - chrome
  chrome:
    image: selenium/standalone-chrome:latest
    ports:
      - "4444:4444"
    shm_size: 2g

先别急着启动,这里注意两个问题:

  1. 这里selenium容器的hostname是chrome,所以要修改command_executor="http://127.0.0.1:4444/wd/hub"中的IP地址,修改后为command_executor="http://chrome:4444/wd/hub"
  2. 注意chrome启动要一定的时间,所以在代码最前面加上几秒钟延时(也可以使用相关手段检测chrome完全启动,可以自行谷歌)
    修改后的代码为:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
time.sleep(5)
driver = webdriver.Remote(
    command_executor="http://chrome:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
driver.get("http://www.baidu.com")
print(driver.title)
driver.close()

然后使用docker-compose启动服务:

docker-compose up -d

如果不报错,在docker logs seleniumchrome_spider_1显示的日志中,同样可以看到:

百度一下,你就知道
在6.2版本安装2.44版本的chromedriver和最新71版本(google-chrome-stable-71.0.3578.80-1.x86_64)的chrome浏览器会报错,比如报GLIBC 2.14和2.16版...
                                    更新驱动程序(当前:geckodriver-v0.19.0,chrome-2.33)
清理本地Docker存储库
docker ps -a | egrep " [Ee]xited " | awk ' {print $1} ' | xargs -Izz55 docker rm zz55
docker images | sed -E " s/[[:space:]]+/ /g " | awk ' {print $3} ' | xargs -Izz55 docker rmi zz55
docker volume ls | sed -E " s/[[:space:]]+/ /g " | awk ' {print $2} ' | xargs -Izz55 docker volume rm zz55
docker build -t debian-headless .
运行交互式外壳
docker 
但是,有的时候我们希望离线安装,即我有安装包后不需要联网也能安装好。
如何辨别离线安装包和在线安装包,离线的体积大很多。然后看看从下载的文件的名字是否可以猜出来,比如chrome的离线安装包有standalone字样(ChromeStandaloneSetup64)
如何离线安装
selenium/hub: Grid Hub,相當於一個空白的Seleniun Server,
selenium/node-chrome: Chrome節點,需加入Grid Hub才能使用selenium/node-firefox: Firefox節點,需加入Grid Hub才能使用docker pull selenium/hub
docker pull selenium/node-chrome-debug
docker pull selenium/node-firefox-debug
启动hub
docker run --na.
                                    python3 + selenium + docker_chrome实现了什么本文要说什么工作思路技术前提要求环境准备安装selenium/standalone-chrome-debug安装界面登录工具python + selenium执行程序Done!
实现了什么
python3 + selenium + chrome
可以进行网页内容提取,俗称爬虫
进行自动化操作
本文要说什么
安装chrome docker版,主要是为了能够在后台运行chrome且随时可以得到界面调试
python3和selen
                                    Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
软件的名称来自称作Chrome的网络浏览器GUI(图形使用者界面)。软件的beta测试版本在2008年9月2日发布,提供50种语言版本,有Windows、macOS、Linux、Android、以及iOS版本提供下载。 [1]  谷歌将在Chrome上推出“小程序”增强型网页应用(Progressive Web Apps,简称 PWA)。 
Draw.io Desktop公开了一个命令行客户端,使我们可以创建,检查或导出图表。
 由于Draw.io Desktop是一个GUI应用程序,因此我们需要一个GUI环境来运行它。 而且这阻止了我们将其用于非GUI环境(例如CI工具)中的自动化。
 这个docker映像使我们能够通过使用可配置的X服务器以无头模式运行命令行客户端。
 其他较小的补充可用
由于应用程序有时可能会挂起,因此添加了超时功能(由于GUI模式下需要用户执行操作)
 清除电子安全警告中的输出日志
禁用自动更新功能以避免不必要的日志
docker run -it -w /data -v $( pwd ) :/data rlespinasse/drawio-desktop-headless
DRAWIO_D
您有一个应用程序。 您想使用真正的浏览器(例如与集成测试该应用程序。 您正在使用 (  ),但是没有OperatingSystem-GUI可用。
在此演示中,使用了 ,它附带了许多。 该应用程序非常简单,它将作为“ Hello World”端点,请参见 。
selenium-standalone-chrome-spring-boot-demo $ mvn verify
Running schulte.markus.seleniumstandalonechromespringboot.controller.HelloContro
                                    docker-selenium-chrome-ftp
 对于某些任务,例如文件上传或开发浏览器扩展,您需要在 Selenium 容器中本地提供文件。 最好的方法是使用共享卷。 此映像的存在是为了帮助在某些环境中解决此问题(例如,Wercker,它可以自动管理您的容器,或者您的容器是远程的环境),在这些环境中您无法轻松地与 Selenium 容器共享卷。
 它基于 Selenium StandaloneChrome 映像,以及 FTP 设置和配置。
 此图像提供:
 谷歌浏览器(带有 xvfb)
 Selenium
FTP 服务器(无需共享文件系统即可轻松上传扩展)
 要使用它,请运行: 
 sudo docker pull pimterry/selenium-chrome-ftp
sudo docker run -p 4444:4444 -p 21:21 pimterry/selenium
                                    dockerchrome浏览器提供服务给selenium平台
docker服务所在的宿主机是任意运行docker的系统(根据机器性能大概能够支持10-20个容器)
实现docker支持web和wap两种模式的用例运行
配置docker-compose 输出服务列表
  chrome:
    container_name: chrome
    image: selenium/standal...