前言
学校的疫情防控,师生健康状态采集
使用的selenium
驱动浏览器,模拟登录与打卡
本来想对接酷q挂服务器上,然后每天将打卡截图发给自己qq的。但是发现要实现发送图片似乎有丶难。 ::quyin:laughing:: 这就没办法了
环境安装
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()