起因是在阮行止大佬的博客看到一篇文章:https://ruanx.net/selenium/ 但是Python和Selenium我都不会啊,而且哈工大和忽忽悠的系统差别较大。
于是发挥优良传统: 抄代码! 在CSDN上找到一篇文章:https://blog.csdn.net/wjl_zyl_1314/article/details/107036245 这篇文章也是代码的主要来源。
开搞之前 自动打卡需要几步?
自动登录 正常情况下我们看到的打卡界面链接是这样的:http://form.hhu.edu.cn/pdc/form/list 在InPrivate窗口中打开就见到了真面目:http://ids.hhu.edu.cn/amserver/UI/Login?goto=http://form.hhu.edu.cn/pdc/form/list
之所以不从信息门户开始纯粹是因为懒(又多了好几步跳转)
接下来就是自动填写用户信息了, 把元素id替换一下就好了。
自动填写信息 忽忽悠的健康打卡页面在缺省时用的是上次填写的信息, 所以就没有写这部分。
自动提交 同理, 重点在确定元素, 这里不得不吐槽提交按钮的阴间设计, id, name, class, Xpath试了一圈都不起作用, 最后用class_name成功定位。
信息反馈 照抄代码没什么好讲的。
吐槽 忽忽悠的服务器最近一直抽风, 预设的时间不一定够网页加载完, 结果就是连续三天看不到熟悉的邮件, 这也是用了一个月又更新的原因。
原来的方法是直接暴力设置几秒的延迟, 结果这几天服务器抽风, 设置的延迟不够。
百度之后学到了新的方法, 设置了最大半个小时的等待时长, 详见这篇文章:https://www.cnblogs.com/Lixinhang/p/10875147.html
半个小时你能卡我, 你能卡死我? 你今天要是半个小时都不让我打卡, 我骚钾肥当场, 把这个电脑屏幕吃掉! ~
完整代码 这里对敏感信息做了模糊处理, 请根据实际情况自行替换。
点我查看完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byimport timedriver = webdriver.Firefox() url = 'http://ids.hhu.edu.cn/amserver/UI/Login?goto=http://form.hhu.edu.cn:80/pdc/form/list' driver.get(url) driver.maximize_window() username = driver.find_element_by_id('IDToken1' ) stu_number = '***' username.send_keys(stu_number) stu_password = '***' password = driver.find_element_by_id('IDToken2' ) password.send_keys(stu_password) sign_inBtn = WebDriverWait(driver, 1800 ).until(EC.presence_of_element_located((By.XPATH, "//*[contains(@onclick, 'defaultSubmit()')]" ))) sign_inBtn.click() goto = WebDriverWait(driver, 1800 ).until(EC.presence_of_element_located((By.CLASS_NAME, "datav-flex-box" ))) goto.click() submit = WebDriverWait(driver, 1800 ).until(EC.presence_of_element_located((By.ID, "saveBtn" ))) submit.click() time.sleep(5 ) driver.close() import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerfrom_addr = '@qq.com' password = '***' to_addr = '@qq.com' smtp_server = 'smtp.qq.com' msg = MIMEText('今日疫情填报已完成' , 'plain' , 'utf-8' ) msg['From' ] = Header(from_addr) msg['To' ] = Header(to_addr) msg['Subject' ] = Header('每日疫情填报情况' ) server = smtplib.SMTP_SSL(smtp_server) server.connect(smtp_server, 465 ) server.login(from_addr, password) server.sendmail(from_addr, to_addr, msg.as_string()) server.quit()