该程序仅供学习和娱乐,如果真的涉及重要疫情信息,请如实向上填报。
from selenium import webdriver
import os
import time
import random
def main():
# 如果没有将chromediriver驱动放到Python的Scripts全局目录,则需要指定对应的执行路径
# 指定绝对路径,引入chromedriver.exe
chromedriver = "G:/360Chrome/360Chrome/Chrome/Application/chromedriver.exe"
## chromedriver = "G:/360Chrome/360Chrome/Chrome/Application/360chrome.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(chromedriver)
# 如果将驱动复制到全局目录,则不需要指定驱动路径,如下:
## browser = webdriver.Chrome()
# 设置浏览器需要打开的url
url = "http://one.xjtu.edu.cn/EIP/nonlogin/user/index.htm"
browser.get(url)
home_page = browser.current_window_handle
time.sleep(2)
# 单击登录按钮
browser.find_element_by_css_selector("a[class=login-btn").click()
time.sleep(2)
# 登录
browser.find_element_by_css_selector("input[type=text").send_keys("这里输入学号")
browser.find_element_by_css_selector("input[type=password").send_keys("这里输入密码")
browser.find_element_by_id("account_login").click()
time.sleep(2)
# 寻找并跳转至表单
iframe1=browser.find_element_by_tag_name("iframe")
browser.switch_to.frame(iframe1)
# 打开每日报标签
browser.find_element_by_partial_link_text("健康每日报").click()
time.sleep(2)
# 关闭原标签
browser.close()
# 跳转至每日报标签
all_handles = browser.window_handles
for handle in all_handles:
if handle != home_page:
browser.switch_to.window(handle)
# 再次登录
browser.find_element_by_css_selector("input[type=text").send_keys("这里再输入学号")
browser.find_element_by_css_selector("input[type=password").send_keys("这里又是密码")
browser.find_element_by_id("account_login").click()
time.sleep(2)
# 先进入大表单,寻找“本科生每日”>iframe1
iframe1=browser.find_element_by_tag_name("iframe")
browser.switch_to.frame(iframe1)
time.sleep(2)
# 进入大表单的第二[1]个小表单里面找元素iframe1>iframes[1]
iframes = browser.find_elements_by_tag_name('iframe')
browser.switch_to.frame(iframes[1])
browser.find_element_by_partial_link_text("本科生每日").click()
time.sleep(1)
# 回退两次,进入第二[1]个大表单里面,寻找“每日健康填报”>iframes[1]
browser.switch_to.parent_frame()
browser.switch_to.parent_frame()
iframes = browser.find_elements_by_tag_name('iframe')
browser.switch_to.frame(iframes[1])
browser.find_element_by_css_selector("li[data-blname=每日健康填报").click()
time.sleep(2)
# 回退一次,>iframes[2]>iframes[0],填写
browser.switch_to.parent_frame()
iframes = browser.find_elements_by_tag_name('iframe')
print(iframes,'\n') # 显示现有表单
browser.switch_to.frame(iframes[2])
iframes = browser.find_elements_by_tag_name('iframe')
browser.switch_to.frame(iframes[0])
time.sleep(1)
browser.find_element_by_id("mini-3$2").click() # 选择健康码为绿色
tpt=random.randint(3,6)/10+36 # 计算随机体温
tpt=str(tpt) # 转化为字符串
browser.find_element_by_id("BRTW$text").send_keys(tpt) # 输入体温
browser.switch_to.parent_frame() # 表单回退
browser.find_element_by_id("sendBtn").click() # 提交
time.sleep(2)
browser.find_element_by_partial_link_text("确定").click() # 确认
time.sleep(2)
# 关闭浏览器
browser.quit()
if __name__ == '__main__':
main()
最后提交完信息以后浏览器会正常关闭。
如果程序中途运行卡住了,可能是浏览器还没反应过来,程序就进入下一步了。
可以在卡住的位置增大等待时间,即增加time.sleep(“SleepTime”)的休息时间SleepTime。
start python pytest.py
pause
啊,填完这个表真的好累啊,框架里面还内联着框架,如果能用一定要给我点赞啊。。。
有问题的话欢迎吐槽和交流。看到的话都会回复。