前言

学校的疫情防控,师生健康状态采集
使用的selenium驱动浏览器,模拟登录与打卡
本来想对接酷q挂服务器上,然后每天将打卡截图发给自己qq的。但是发现要实现发送图片似乎有丶难。 这就没办法了

环境安装

selenium安装:pip install selenium
浏览器驱动程序下载:chromedriver
驱动要与浏览器版本对应

代码

# !/usr/bin/env python3
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.select import Select
import re
import time
from functools import wraps

def RunTime(func):
    @wraps(func)
    def wrapper(*args):
        time1 = time.time()
        func(*args)
        RunTime = time.time() - time1
        print("共耗时:{}".format(RunTime))
    return wrapper

@RunTime
def sing_in(url):
    # 增加无界面选项headless
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # 以无界面运行
    # time1 = time.time()
    print("开始打卡...")
    browser = webdriver.Chrome(chrome_options=chrome_options)
    # 隐性等待页面加载,最长10s
    browser.implicitly_wait(10)
    # 访问url
    browser.get(url)
    # 隐性等待页面加载,最长10s
    browser.implicitly_wait(10)
    # 输入学号
    browser.find_element_by_xpath('//input[@class="TxtUserNameCssClass"]').send_keys(222)
    # 输入密码
    browser.find_element_by_xpath('//input[@class="TxtPasswordCssClass"]').send_keys('mimaxxx')
    # 点击登录
    browser.find_element_by_xpath('//input[@class="IbtnEnterCssClass"]').click()
    # 隐性等待页面加载,最长10s
    browser.implicitly_wait(10)
    # 获取页面html
    source = browser.page_source
    # print(source)
    # 匹配需要打卡项
    sign_name = re.search(r'\d{4}疫情防控——师生健康状态采集', source).group()
    # 打开打卡页面
    browser.find_element_by_link_text(sign_name).click()
    # 打卡属性配置
    jzdd = browser.find_element_by_name('sF21650_1')  # 现居住地点
    jzdzt = browser.find_element_by_name('sF21650_5')  # 现居住地状态
    gzzt = browser.find_element_by_name('sF21650_6')  # 今天工作状态
    jkzt = browser.find_element_by_name('sF21650_7')  # 个人健康状况
    shzt = browser.find_element_by_name('sF21650_8')  # 个人生活状态
    jtzt = browser.find_element_by_name('sF21650_9')  # 家庭成员状况
    Select(jzdd).select_by_value('5')
    # 外地详址--省
    # browser.find_element_by_xpath('//input[@name="sF21650_2"]').send_keys('xx省')
    # 市
    # browser.find_element_by_xpath('//input[@name="sF21650_3"]').send_keys('xx市')
    # 县
    # browser.find_element_by_xpath('//input[@name="sF21650_4"]').send_keys('xx县/区')
    # 下面是设置各个选项值
    Select(jzdzt).select_by_value('1')
    Select(gzzt).select_by_value('3')
    Select(jkzt).select_by_value('1')
    Select(shzt).select_by_value('1')
    Select(jtzt).select_by_value('1')

    # 提交打卡
    browser.find_element_by_xpath('//input[@value="提交打卡"][1]').click()
    print("打卡成功...")
    # 点击确认弹窗
    # alert = browser.switch_to.alert.text
    browser.switch_to.alert.accept()
    # browser.switch_to_alert().text

    # 设置窗口大小,保存图片到本地
    browser.set_window_size(500, 800)
    screenshot_name = time.strftime("%Y-%m-%d", time.localtime())
    # print(screenshot_name)
    browser.save_screenshot('C:\\Users\\cooyf\\Desktop\\' + screenshot_name + '.png')
    print("图片保存成功:{}".format(screenshot_name + '.png'))
    # time2 = time.time()
    # print("共耗时:" + str(time2 - time1))

if __name__ == '__main__':
    url = 'http://xxx/Login.asp'
    sing_in(url)

上面的弹窗本来用的browser.switch_to_alert()但是被划了线,去搜了下虽然划了线,但是依旧可以使用。
强迫症可以用下面三中:

  • browser.switch_to.alert.text
  • browser.switch_to.alert.accept()
  • browser.switch_to.alert.dismiss()
Last modification:March 27th, 2020 at 03:47 pm
如果觉得我的文章对你有用,请随意赞赏