zoukankan      html  css  js  c++  java
  • 在docker容器中部署python-selenium+chrome-headless自动化脚本(续)

    本文将会讲到下列内容:
    1、制作镜像
    2、编排容器
    显然,上次做的不好,如果移植的话,python3还是需要重新安装,这显然不符合我们的初衷。那么,把依赖的python3也做成镜像吧。

    一、制作python3镜像

    1、拉去最新python镜像:docker pull python

     (我这因为已经拉取过了哈)

    2、编写Dockerfile制作镜像:

    新建文件Dockerfile,写入下列信息:(注意:文件名只能是这个)
    FROM python:alpine3.6
    RUN pip install selenium
    保存,执行命令:docker build . -t selenium_python:v1
    (构建名为selenium_python的镜像,版本号为:v1;构建需要指定Dockerfile路径,这里指向当前目录)
    构建完,docker images查看镜像列表:

    二、使用docker-compose编排容器

    1、安装这货

    yum install docker-compose

     2、新建配置文件docker-compose.yml,同样的,后面执行命令时也需要指定该文件路径

    version: "2.0"
    services:
      python:
        image: selenium_python:v1
        volumes:
          - ./baidu.py:/root/baidu.py  # 将本地文件映射到容器内,前面的路径是本机的,后面的是容器的。注意:可以指定具体文件,也可以指定路径
        command: python /root/baidu.py  # 定义启动容器执行的命令
        depends_on:
          - chrome #映射的域名,脚本中要把域名改成这个
      chrome:
        image: selenium/standalone-chrome:latest
        ports:
          - "4444:4444"
        shm_size: 2g
    

    修改脚本,上篇文章中的脚本,稍微改下:

    访问selenium-chrome服务改为:command_executor="http://chrome:4444/wd/hub"
    driver前加上一点等待时间,防止selenium-chrome还未启动完成,就开始执行脚本。
    改完的baidu.py如下:
    # /usr/bin/bash python
    # -*- coding:utf-8 -*-
    
    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("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%E5%A5%B3%E7%A5%9E%E8%8A%82%E5%BF%AB%E4%B9%90&oq=iPad%25E7%2594%25BB%25E6%25B0%25B4%25E5%25BD%25A9&rsv_pq=da863c960031fa89&rsv_t=320bU5S7GOOB43J2GLgjE66RWcLR2giCuNktmA5I6Wm7VcW7dZ1It2hKWxs&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=8595&rsv_sug3=16&rsv_sug1=14&rsv_sug7=101&rsv_sug2=0&rsv_sug4=11686")
    content = driver.title.split("_")[0]
    print(content)
    driver.close()
    

    3、启动: docker-compose up -d

    # 如果出现下面的提示,关掉上次启动的容器即可

    如果没出现上面的,那就会出现名场面了:

    虽然绿了,但也不确定是不是真的搞定了撒,查看下日志:

    docker logs root_python_1(root_python_1是编排工具自动给python那个容器命名的)
    又看到这个祝福了,真棒!上次萦绕这些的时候,仿佛就在一个礼拜前。
    收工,饿了!
     
  • 相关阅读:
    Java生鲜电商平台-微服务架构利弊分析(生鲜小程序/APP)
    实用---eclipse中的代码提示功能
    实验---数据结构中字符串的匹配问题
    实验---实现两个指数递减多项式的和与积
    实验----Java的二维数组的应用及杨辉三角的编写
    你也想成为白帽子么?推荐一份网络安全书单!
    互联网公司的敏捷开发是怎么回事?这一份软件工程书单送给你!
    曾经我也有一个做游戏的梦想,这几本游戏开发的书籍推荐给为未来的游戏工程师
    如何做好Linux服务器运维,你可能需要这一份运维工程师书单!
    如何做好Linux服务器运维,你可能需要这一份运维工程师书单!
  • 原文地址:https://www.cnblogs.com/mikasama/p/12494345.html
Copyright © 2011-2022 走看看