ubuntu安装Docker并部署selenium-grid

一、docker安装

Ubuntu

1.检查内核版本大于3.10

unama -a

2.更新apt源

sudo apt-get update

3.安装docker

sudo apt-get install -y docker.io

4.(建议)更新成国内源

为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

修改保存后重启 Docker 以使配置生效。

5.启动、重启docker

sudo service docker start
sudo service docker restart

(可选)检查docker运行情况

sudo docker version

这里我发现,许多操作都需要sudo,才能正常完成

(可选)运行系统引导时启用 docker,

systemctl enable docker

CentOS7

注意了,必须是CentOS7及以上,不然没法装docker-ce版,其余的网上很多教程,略

二、配置selenium容器

官方github

1.从dockerhub搜索image

sudo docker search selenium 

2.选择合适的image

1>下载主hub镜像(用于管理的)

sudo docker pull selenium/hub

2>下载主node chrome镜像(实际干活的)

sudo docker pull selenium/node-chrome

3.启动docker image

1>启动selenium/hub

sudo docker run -d -P --name selenium-hub selenium/hub
  • -d 表示容器以守护态(Daemonized)形式运行
  • -P 表示 Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
  • --name 取个容器名NAMES

2>启动selenium/node-chrome

sudo docker run -d --link selenium-hub:hub selenium/node-chrome
  • --link 表示关联到selenium-hub并设置别名hub

3>可选,扩大连接
可以使用如下方式扩大并发

docker run -d -P -e GRID_TIMEOUT=1800 -e GRID_MAX_SESSION=5 --name selenium-hub selenium/hub
  • -e GRID_TIMEOUT=1800 限制连接时间(s为单位,30分钟后,不管怎样都会断开连接)
  • -e GRID_MAX_SESSION=5 扩大会话数(上面默认是1)
docker run -d -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --link selenium-hub:hub selenium/node-chrome
  • -e NODE_MAX_INSTANCES=5
  • -e NODE_MAX_SESSION=5

4>可选,偶然去github看了项目的md,官方指定的部署命令

# 官方的
docker network create grid
docker run -d -p 4444:4444 --net grid --name selenium-hub selenium/hub
docker run -d --net grid -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-chrome

# 结合一下,扩大并发的选项
docker network create grid
docker run -d -p 4444:4444 --net grid -e GRID_MAX_SESSION=5 -e GRID_TIMEOUT=900 --name selenium-hub selenium/hub
docker run -d --net grid -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 -e HUB_HOST=selenium-hub -v /dev/shm:/dev/shm selenium/node-chrome

(可选)使用docker-compose部署

真的是简便多了!docker-compose 轻松部署多容器

4.验证成功

1>查看运行情况

sudo docker ps

如下:

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                     NAMES
3a17f7233a7b        selenium/node-chrome   "/opt/bin/entry_poin…"   7 minutes ago       Up 7 minutes                                  cranky_haibt
9b273239c034        selenium/hub           "/opt/bin/entry_poin…"   10 minutes ago      Up 10 minutes       0.0.0.0:32768->4444/tcp   selenium-hub

2>打开浏览器: http://192.168.81.98:32768/grid/console可以看到部署了一台chrome

  • 这里根据上图的0.0.0.0:32768可知暴露端口为32768
  • ubuntu主机ip:192.168.81.98

5.python程序调用

程序调用测试代码:

from selenium import webdriver


driver = None
try:
    driver = webdriver.Remote(command_executor='http://192.168.81.98:32768/wd/hub',
                              desired_capabilities={'browserName': 'chrome'})

    driver.get('https://www.baidu.com')
    driver.implicitly_wait(15)
    driver.get_screenshot_as_file("./baidu_img.png")
    print("OK")
finally:
    if driver is not None:
        driver.quit()
posted @ 2019-02-20 16:27  happy_codes  阅读(602)  评论(0编辑  收藏