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日

相关文章

  • androidcursor浅析

    Android Cursor浅析 在Android开发中,Cursor是一种用于访问和处理查询结果的接口。它提供了一种简单的方式来遍历查询结果,并且可以用于访问SQLite数据库中的数据。以下是Android Cursor的完整攻略: 步骤1:创建Cursor对象 要使用Cursor,首先需要创建一个Cursor对象。可以使用以下代码创建一个Cursor对象…

    other 2023年5月9日
    00
  • Hbuilder开发HTML5 APP之创建子页面

    Hbuilder开发HTML5 APP之创建子页面 在Hbuilder中开发HTML5 APP,创建多个页面是必不可少的。创建多个子页面可以更好地组织你的APP结构,丰富你的APP功能,提升用户体验。在本篇文章中,我们将提供详细的步骤指导,教你如何创建一个子页面。 第一步:创建父页面 在Hbuilder中创建父页面相对简单。打开Hbuilder,选择项目文件…

    其他 2023年3月28日
    00
  • 变量延迟详解 call setlocal

    变量延迟详解 call setlocal 完整攻略 在批处理脚本中,call setlocal 是一个非常有用的命令,它可以创建一个局部作用域,使得在该作用域内定义的变量仅在该作用域内有效。这种变量延迟的机制可以帮助我们更好地控制变量的作用范围,避免变量冲突和混淆。下面是关于 call setlocal 的详细讲解和示例说明。 1. call setloca…

    other 2023年8月17日
    00
  • Android Studio自定义万能注释模板与创建类,方法注释模板操作

    首先,我们需要了解什么是注释模板。注释模板就是在编写代码时,自动生成的注释文本模板。在Android Studio中,我们可以通过自定义注释模板来提高代码的可读性,减少注释时间。 一、自定义万能注释模板 Android Studio默认提供了一些常见注释模板,如类的注释,方法的注释等。但是,我们可以自定义更多的注释模板,以适应我们的实际开发需求。 打开And…

    other 2023年6月25日
    00
  • Win7桌面右键菜单小工具选项如何删除没有太多作用

    Win7桌面右键菜单小工具选项,是指在windows7系统桌面上右键出现的弹出菜单中,出现的一些小工具选项,例如屏幕保护、背景、个性化等选项。 若想删除Win7桌面右键菜单小工具选项,可以采用以下两种方法: 方法一:修改注册表 按下“Win+R”组合键打开运行窗口,输入“regedit”并回车,打开注册表编辑器。 在注册表编辑器中,依次展开以下目录:HKEY…

    other 2023年6月27日
    00
  • Win10 Java jdk14.0.2安装及环境变量配置详细教程

    Win10 Java jdk14.0.2安装及环境变量配置详细教程 安装JDK 下载JDK 前往官网(https://www.oracle.com/java/technologies/javase-jdk14-downloads.html)下载JDK 14.0.2版本,并根据操作系统选择相应的安装包。 安装JDK 将下载的JDK安装包双击打开,跟随向导完成安…

    other 2023年6月27日
    00
  • vim中进行列编辑的方法

    以下是关于“vim中进行列编辑的方法”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 在Vim中,列编辑是指多行文本中对某一列进行编辑的操作。这种操作可以大大提高编辑效率特别是在需要对多行文本进行相同操作时。 解决方法 以下是Vim中进行列编辑的解决方法: 使用Ctrl + v进行列选择 使用Ctrl + v进入列选择模式。 使用上下键选…

    other 2023年5月7日
    00
  • CorelDraw x6 (Cdr x6) 官方简体中文破解版(32位)安装图文教程、破解注册方法

    CorelDraw x6 (Cdr x6) 官方简体中文破解版(32位)安装图文教程、破解注册方法 简介 CorelDraw x6是一款功能强大的图形设计软件,但官方版本需要付费购买。本攻略将详细介绍如何安装和破解CorelDraw x6的官方简体中文破解版(32位),以便您免费使用该软件。 步骤1:下载软件 首先,您需要下载CorelDraw x6的官方简…

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