欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python+selenium的自动健康打卡代码

程序员文章站 2022-04-16 16:17:49
到一个地方做一个地方的自动打卡。真是难为我了话不多说,直接放代码# -*- codeing = utf-8 -*-# @Time: 2020/3/31 8:30# @Author : czg# @File : qiandao.pyimport timeimport osimport datetimefrom selenium import webdriverfrom selenium.webdriver.common.alert import Alertfrom selenium...

到一个地方做一个地方的自动打卡。真是难为我了

话不多说,直接放代码

# -*- codeing = utf-8 -*-
# @Time: 2020/3/31 8:30
# @Author : czg
# @File : qiandao.py
import time
import os
import datetime
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.common.keys import Keys
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from selenium.webdriver.support.select import Select


def sendEmail(messages): #用于签到后发送邮箱提醒
    from_add = 'xxxxxxxx@qq.com' #填写发信方邮箱,邮件从这个邮箱发送到其他的邮箱
    password = 'pgtvmzzgdlhubfjj' #此密码是邮箱开启SMTP后的获得的授权码数字
    to_add = 'xxxxxxxxx@qq.com' #填写收信方邮箱
    smtpserver = 'smtp.qq.com' #由于使用的是qq邮箱,所以smtp服务器填写qq的服务器
    msg = MIMEText(messages, 'plain', 'utf-8')
    msg['From'] = Header(from_add)
    msg['To'] = Header(to_add)
    msg['Subject'] = Header('学生健康打卡')
    server = smtplib.SMTP_SSL()
    server.connect(smtpserver)
    server.login(from_add, password)
    server.sendmail(from_add, to_add, msg.as_string())
    server.quit()


def sevenClock():
    if time.localtime(time.time()).tm_hour == 7:
        return True
    else:
        return False


message = "签到"
while True:
    try:
        if sevenClock():
            print("七点钟")
            # iedriver = r"C:\Program Files\Internet Explorer\IEDriverServer.exe" #如果使用ie浏览器就用此代码,路径跟随自己电脑中文件路径
            # os.environ["webdriver.ie.driver"] = iedriver

            driver = webdriver.Firefox()#这个是火狐浏览器所使用的
            driver.get("https://xxx.cn/")#此处参数填写网址
            #打开网页,跳转到登陆
            driver.find_element_by_id("username").send_keys("xxxxxx")
            #在username中输入用户名
            driver.find_element_by_id("password").send_keys("xxxxxx")
            #在password中输入密码
            driver.find_element_by_id("password").send_keys(Keys.ENTER)
            #回车登陆
            time.sleep(3)
            driver.get("https://xxxxxx/index")
            #打开健康信息页面
            driver.find_element_by_xpath("//div[@name='sfzx']/div/div/span[1]").click()
            #找到今日是否在校按钮路径并点击
            driver.find_element_by_name("area").find_element_by_tag_name("span").click()
            #点击本地位置
            time.sleep(15)
            driver.find_element_by_css_selector(".wapat-btn.wapat-btn-ok").click()
            #关闭弹窗

            province = Select(driver.find_element_by_css_selector(".hcqbtn.hcqbtn-danger")) #根据css选择器查找标签位置
            province.select_by_value("xx省")#选择指定标签
            time.sleep(1)
            city = Select(driver.find_element_by_css_selector(".hcqbtn.hcqbtn-warning"))
            city.select_by_value("xx市")
            time.sleep(1)
            district = Select(driver.find_element_by_css_selector(".hcqbtn.hcqbtn-primary"))
            district.select_by_value("xx区")
            #点击位置下拉框
            driver.find_element_by_xpath("//div[@name='jrdqtlqk']/div/div[3]/span[1]").click()
            driver.find_element_by_xpath("//div[@name='sfymqjczrj']/div/div[2]/span[1]").click()
            driver.find_element_by_xpath("//div[@name='sfqrxxss']/div/div/span[1]").click()
            # 点击其他信息
            driver.find_element_by_xpath("//div[@class='list-box']/div[@class='footers']/a").click()
            #点击弹出框的提交
            driver.find_element_by_css_selector(".wapcf-btn.wapcf-btn-ok").click()
            #点击弹出框的确定
            driver.close()
            message += '成功  ' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            #发送邮件
            sendEmail(message)
            message = "签到"
            time.sleep(3600) 
        else:
            print("现在 "+str(time.localtime(time.time()).tm_hour) + "点钟")
            time.sleep(3600) #休眠一小时
    except BaseException as e:
        print(message + "失败")
        message += '失败  ' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        sendEmail(message)
        message = "签到"
        break

我是在微信的打卡页面获得的打卡页面网址,然后在电脑端输入该网址。由于大部分系统都有登陆过滤,所以电脑端输入网址后不会直接进入打卡页面,会被重定向到登陆页面,所以代码中存在登陆。

代码应该是因页面而异的,在打卡页面源码中找到需要输入或者点击的控件,输入对应的内容或者操作。其实很简单,只不过可能需要慢慢调试。如果打卡页面发生变化,就可能是出现该输入的东西没输入导致报错。所以需要发送成功或者失败的邮件给自己。这里的发送邮件功能可以参考:https://blog.csdn.net/LeoPhilo/article/details/89074232

大家猜猜我写的是哪里的健康打卡系统。

最后提醒一句,大家如果长时间呆在一个地方,重复相同的打卡操作,可以使用这个自动打卡。如果所在地转移,还是要主动上报健康打卡的。疫情期间,大家都不容易,不要为了贪图省事,造成国家的损失!本文不对滥用自动打卡功能负责。

本文地址:https://blog.csdn.net/weixin_42562370/article/details/107664266