Docker+selenium实现自动化健康报备的方法

标题: Docker+selenium实现自动化健康报备攻略

1. 背景介绍

健康报备现在已经成为了很多单位和个人的重要任务,而每天手动进行报备,不仅麻烦,而且还容易出现漏报等问题。于是,许多人开始尝试使用自动化工具来实现健康报备的自动提交。其中,Docker+selenium成为了一种比较常用的组合。

2. Docker+selenium的基本原理

Docker+selenium可以理解为在Docker镜像内安装并运行selenium自动化测试工具。通过使用Docker可以方便地创建和管理镜像,而使用selenium则可以实现浏览器自动化操作。这样,我们就可以创建一个Docker镜像,并在其中安装好selenium实现自动化健康报备的任务。

3. 实现步骤

3.1 准备工作

在开始使用Docker+selenium实现自动化健康报备之前,我们需要先完成以下几个准备工作:

  • 安装Docker和docker-compose
  • 准备Python环境并安装selenium和requests库

3.2 创建Docker镜像

创建Docker镜像的具体步骤如下:

  1. 创建一个新的文件夹,用于存放Dockerfile和docker-compose.yml文件;
  2. 在该文件夹下创建一个名为Dockerfile的文件,并将以下内容复制到文件中:
FROM python:3
RUN apt-get update && apt-get install -yqq firefox-esr xvfb
RUN wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get install -yqq google-chrome-stable

COPY . /app
WORKDIR /app
COPY requirements.txt /app
RUN pip install --no-cache-dir -r /app/requirements.txt

CMD [ "python", "./main.py" ]

解释:

  • 第1行指定基础镜像为python3
  • 第2行安装firefox和xvfb,xvfb是模拟X环境,让firefox可以运行在无头模式下
  • 第3-5行安装chrome
  • 第7行将本地目录/app拷贝到镜像的/app目录下,WORKDIR指定工作目录
  • 第8行将本地的requirements.txt拷贝到镜像的/app目录下
  • 第9行使用pip安装所需的Python依赖
  • 第11行指定容器启动方式为python main.py,main.py是我们后面要实现的脚本。

  • 在该文件夹下创建一个名为docker-compose.yml的文件,并将以下内容复制到文件中:

version: '2'
services:
  web:
    build: .
    volumes:
      - .:/app
    environment:
      DISPLAY: :99
    depends_on:
      - xvfb
      - firefox
  xvfb:
    image: registry.cn-beijing.aliyuncs.com/vincent/docker-xvfb
    privileged: true
    restart: always
    tty: true
    container_name: xvfb
  firefox:
    image: starefossen/firefox
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - xvfb
    environment:
      DISPLAY: :99

解释:

  • 第3-14行定义web服务:
  • build: . 指定镜像的构建路径为当前路径
  • volumes: .:/app 将本地目录/app映射到容器的/app目录下
  • environment: DISPLAY: :99 设置环境变量,表示使用Xvfb显示
  • depends_on: 启动容器时依赖xvfb和firefox两个容器
  • 第16-24行定义xvfb服务,使用的是一个国内的Docker镜像
  • 第26-36行定义firefox服务,使用的是官方的Docker镜像

运行以下命令创建Docker镜像:

docker-compose build

3.3 实现自动化健康报备

接下来,我们需要创建一个Python脚本,在selenium中实现自动化健康报备。

创建一个名为"main.py"的Python脚本,并将以下内容复制到文件中:

import time
import os

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import requests

# 报备地址
url = 'https://xx.xx.com'

# 你的学/工号
username = 'xxx'

# 密码
password = 'xxx'

def check_health():
    # 启动firefox浏览器
    options = webdriver.FirefoxOptions()
    #options.headless = True
    driver = webdriver.Firefox(options=options)
    driver.implicitly_wait(10)

    # 使用浏览器访问指定的网址
    driver.get(url)

    # try:
    # 输入用户名和密码,点击登录
    username_element = driver.find_element_by_id('user_name')
    password_element = driver.find_element_by_id('password')
    username_element.send_keys(username)
    password_element.send_keys(password)
    time.sleep(0.5)
    action = ActionChains(driver).move_to_element(password_element).click()
    action.perform()

    time.sleep(0.5)

    # 定位到“填报”按钮并点击
    fill_in_element = driver.find_element_by_xpath('//*[@id="app"]/div[4]/div[1]/div/div[1]/div[1]/div[3]/button')
    fill_in_element.click()

    time.sleep(1)

    # 定位到“膳食认证”按钮并点击
    checkbox_elements = driver.find_elements_by_xpath('//*[@id="app"]/div[4]/div[1]/div/div[2]/div/div/div[2]/div/div')
    checkbox_elements[-1].click()
    time.sleep(1)

    # 定位到“上报按钮”并点击
    submit_element = driver.find_element_by_xpath('//*[@id="app"]/div[4]/div[1]/div/div[10]/div[3]/button[2]')
    submit_element.click()
    time.sleep(1)

    # 模拟键盘操作进行确认
    actions = ActionChains(driver)
    actions.send_keys(Keys.TAB * 8, Keys.SPACE)
    actions.perform()

    time.sleep(1)

    # 定位到“确认上报”按钮并点击
    confirm_element = driver.find_element_by_xpath('//*[@id="app"]/div[5]/div/button[2]')
    confirm_element.click()
    time.sleep(1)

    # 关闭浏览器
    driver.quit()

if __name__ == '__main__':
    check_health()

在使用过程中,需要将url、username和password设置为你自己的健康报备地址、用户名和密码。

3.4 启动Docker容器

接下来我们需要启动Docker容器来自动执行健康报备任务。

在当前目录下,运行以下命令启动容器。

docker-compose up

3.5 任务调度

为了每天自动执行健康报备任务,我们还需要使用定时任务调度库来实现自动执行脚本的功能。以Linux系统为例,可以使用crontab来实现这个功能。

运行以下命令打开cron编辑界面:

crontab -e

在打开的文件末尾加入以下内容,表示每天的8:00和20:00分别执行健康报备任务:

0 8 * * * docker-compose -f /path/to/docker-compose.yml up -d
0 20 * * * docker-compose -f /path/to/docker-compose.yml up -d

注意,需要将/path/to/docker-compose.yml替换成你自己的docker-compose.yml的路径。

4. 示例说明

示例1:使用firefox执行健康报备

在3.3中的代码中,我们使用了Firefox作为浏览器来执行健康报备。Firefox是一款免费的开源浏览器,在大多数的情况下可以满足我们的需求。但是,如果你的健康报备网站需要使用Chrome浏览器才能正常工作,那么可以将3.3中的代码中的Firefox相关代码修改为Chrome相关代码即可。

示例2:将Docker部署到Kubernetes中

Docker镜像可以很方便地部署到Kubernetes集群中。在Kubernetes中,可以使用Deployment或者StatefulSet对象来部署和管理Docker容器。可以使用以下命令将Docker镜像部署到Kubernetes中:

kubectl create deployment selenium --image=<docker-image> --replicas=1

其中,\<docker-image>是你自己的Docker镜像地址。使用以上命令创建的Deployment对象将会在Kubernetes中自动创建和管理1个Docker容器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker+selenium实现自动化健康报备的方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 现在什么键是win7关机重启快捷键有哪些快速关机的方法

    关机和重启是我们日常使用电脑时最常用到的操作之一。在使用Windows 7系统时,可以使用一些快捷键来实现快速关机和重启。下面是详细的攻略步骤。 使用快捷键实现快速关机和重启 Windows 7系统有两套快捷键来实现快速关机和重启。一套是使用键盘上的功能键,另外一套是使用命令行。 使用键盘上的功能键 Windows 7系统使用Shift键来激活快捷键,同时结…

    other 2023年6月27日
    00
  • 1.1js基础

    JavaScript是一种广泛使用的脚本语言,可以用于Web开发、桌面应用程序、游戏开发等领域。以下是关于JavaScript基础的详细攻略: JavaScript基础概述 JavaScript是一种基于对象和事件驱动的脚本语言,可以用于Web开发、桌面应用程序、游戏开发等领域。JavaScript可以与HTML和CSS结合使用,实现动态效果和交互性。Jav…

    other 2023年5月8日
    00
  • 如何通过apt-get获得安装包的源码

    概述 在Ubuntu系统中,我们可以使用apt-get命令来安装软件包。有时候,我们需要获取软件包的源码以进行二次开发或调试。本文将为您提供一份完整攻略,介绍如何通过apt-get获得安装包的源码,并提供两个示例说明。 通过apt-get获得安装包的源码的步骤 步骤1:更新软件包列表 在获取软件包的源码之前,我们需要更新软件包列表。可以使用以下命令来更新软件…

    other 2023年5月5日
    00
  • CAD32位和64位有什么区别 CAD32位和64位区别介绍

    CAD软件是计算机辅助设计软件,它可以帮助工程师和设计师创建、修改和分析各种设计。CAD软件通常有32位和64位两个版本,它们之间有以下区别: 内存访问能力:32位CAD软件最多只能访问4GB的内存,而64位CAD软件可以访问更大的内存空间。这意味着在处理大型和复杂的设计文件时,64位CAD软件可以更高效地运行,因为它可以利用更多的内存来处理数据。例如,当你…

    other 2023年7月28日
    00
  • jq的urlencode

    jq的urlencode 在数据处理过程中,我们常常需要对URL中的参数进行编码,以防止特殊字符对URL的正常解析造成影响。而对于jq这个支持json数据格式处理的工具来说,如果要对URL进行编码,可以使用它内置的函数-urlencode。 url数据编码 URL编码是将特殊字符转换成一些转义字符,以便浏览器能够正确的处理这些字符,特别是一些中文、字母、数字…

    其他 2023年3月29日
    00
  • 在Java中如何避免创建不必要的对象

    在Java中,可以采取以下方法来避免创建不必要的对象: 使用字符串常量池:Java中的字符串常量池可以重用字符串对象,避免重复创建相同内容的字符串对象。可以使用字符串常量池中的字符串字面量或者使用String.intern()方法将字符串对象添加到常量池中。 示例说明1:使用字符串常量池 String str1 = \"Hello\"; …

    other 2023年10月15日
    00
  • vscode使用editorconfig插件以及.editorconfig配置文件说明详解

    下面我将为你提供详细讲解“vscode使用editorconfig插件以及.editorconfig配置文件说明详解”的完整攻略。 什么是editorconfig? editorconfig是一款编辑器插件,它提供了一种配置文件格式,用于在不同编辑器以及IDE中保持一致的代码风格,包括缩进、换行符类型、文件编码等等。它的作用在于,在不同的编辑器或开发者环境下…

    other 2023年6月25日
    00
  • 2023年个人所得税App怎么查看是否是最新版本? 个税查看版本号的技巧

    2023年个人所得税App版本查看攻略 1. 打开个人所得税App 首先,确保您已经下载并安装了2023年个人所得税App。在您的手机或平板电脑上找到该应用程序,并点击打开。 2. 导航至设置页面 一旦您成功打开个人所得税App,寻找并点击应用程序中的设置选项。通常,设置选项可以在应用程序的主页或菜单栏中找到。 3. 查找版本信息 在设置页面中,您应该能够找…

    other 2023年8月3日
    00
合作推广
合作推广
分享本页
返回顶部