每日一报以前只需要填写温度,但是随着疫情的严重,填写的内容越来越多,所以可以尝试用浏览器自动化的功能来完成,这样连舍友的也能帮忙完成了。
-
下载浏览器驱动
我用的是谷歌浏览器,所以给的这个连接也谷歌浏览器的驱动,大家可以根据自己的谷歌版本自行下载。 [http://chromedriver.storage.googleapis.com/index.html](http://chromedriver.storage.googleapis.com/index.html)
-
根据每日一报的具体内容编写代码(python实现)
1)导包:from selenium import webdriver
,如果没有,先去pip安装一下selenium
2)web驱动:bro = webdriver.Chrome(executable_path="chromedriver.exe")
,因为我的浏览器驱动直接放在根目录下,所以我的executable_path直接写chromedriver.exe。这样的话我们就获得了一个浏览器对象。
3)登录:每日一报需要登录,把用户名和密码用字符串保存起来(我用的是文件,这样避免了可以直接被看到密码的这一情况),由于我写的这一个程序也帮舍友写每日一报,因此,我用for循环来遍历每次每人的用户名和密码。
4)获取网页并登录
我以我的学校为例,首先get到这个网页,解析到用户名和密码框,并把刚才解析到的用户名密码发送过去(我这里用的是find_element_by_xpath解析),右键鼠标,点击“检查”,通过网页代码,来获得classname、id、xpath等等
bro.find_element_by_xpath('//div[@class="slides"]/div[3]//input[@type="text"]').send_keys(username)
bro.find_element_by_xpath('//div[@class="slides"]/div[3]//input[@type="password"]').send_keys(password)
接下来,需要解析“登录”这个按钮(因为这个是提交按钮,所以我用的class来解析的,如果有id,也可以用id来解析)。
bro.find_element_by_class_name("submit_button").click()
5)跳转到点击每日一报的界面
当你登录以后,发现页面地址发生了变化,这时需要重新get一下(网址我就不写了,可以根据自己学校的网址尝试)
获得页面后,我们需要点击“每一一报(daily Report)”这个按钮,道理同上。
bro.find_element_by_class_name("icos").click()
页面跳转,需要重新get一下
6)跳转到填写每日一报的界面
身体状况填写(单选框,填写“良好”或“不适”,写良好之后,下面的“症状Symptom就不需要填了”,如果写的“不适”,则需要填写症状一栏)
bro.find_element_by_id("fineui_2-inputEl-icon").click()
温度填写(一般直接写个37就完事了,想玩玩的话,搞一个个范围内的随机数也行,嘿嘿)
bro.find_element_by_id("p1_TiWen-inputEl")temperature.send_keys("37").send_keys("37")
同理,下面的就是见招拆招,需要填什么,就直接解析什么。
7)关闭
写完以后,记得关闭这个webdriver,也可以输出一句话来显示每日一报填完了
print("Over!!!")
bro.quit()
-
总结
首先,通过webdriver获得浏览器对象,接下来登录、跳转、解析需要填写的东西,最后,提交保存。 -
代码部分
我发送的是我们学校的代码,一些解析的地方可能不太对,可根据自己自行修改
#-*-coding:utf-8-*-
from selenium import webdriver
import time
f=open("user","r")
count=0
for i in f:
count+=1
f.close()
if __name__ == '__main__':
f = open("user", "r")
for i in range(1,(count//2)+1):
u = f.readline().strip()
p = f.readline().strip()
bro = webdriver.Chrome(executable_path="chromedriver.exe")
# 输入用户名和密码
bro.get("填写用户名密码的那个界面")
username = bro.find_element_by_xpath('解析用户名的框')
time.sleep(1)
username.send_keys(u)
password = bro.find_element_by_xpath('解析密码的那个框')
time.sleep(1)
password.send_keys(p)
time.sleep(1)
bro.find_element_by_class_name("submit_button").click()
bro.get("登录到“我的界面”")
time.sleep(1)
bro.find_element_by_class_name("icos").click()
bro.get("跳转到填报界面")
bro.find_element_by_id("fineui_13-inputEl-icon").click()
bro.find_element_by_id("fineui_15-inputEl-icon").click()
time.sleep(1)
# 身体状况填写
bro.find_element_by_id("fineui_2-inputEl-icon").click()
time.sleep(1)
#温度填写
temperature = bro.find_element_by_id("p1_TiWen-inputEl")
temperature.send_keys("37")
time.sleep(1)
# 是否在校
bro.find_element_by_id("fineui_10-inputEl-icon").click()
time.sleep(1)
bro.find_element_by_id("p1_CheckAddress-inputEl-icon").click()
# 填写完毕,确认提交
bro.find_element_by_class_name("f-btn-text").click()
time.sleep(1)
# 确认对话框
bro.find_element_by_id("fineui_39").click()
time.sleep(2)
# 提交成功
bro.find_element_by_id("fineui_44").click()
time.sleep(1)
bro.close()
f.close()
print("Over!!!")
bro.quit()
文章中如果有解释不清楚的地方,在评论区留言或私信。当然,也欢迎大佬指正错误,十分感激。
转载请注明出处