办公室姜姐姐拉着我看了她最近在做的一个特无语的工作,那就是一个个录入教师的学分,全校两三百号人的数据就需要那样一个个重复的输入进去。她还告诉我,有同行解决了自动录入,但是不知道他们怎么自动的。我想了想,再网上查查,发现可以用web自动化来解决它(我这个井底之蛙确实见识少,这个早就存在的技术结果还需要查),于是花了8个小时左右来进行学习并实践,终于解决了这个问题,期间碰到的最多的问题就是窗口切换后的对应控件的获取不到的问题,翻阅了不少技术文章,做了很多次尝试,理解自动化的原理后,最终体会到了成功的快乐,也再一次见证自己的学习能力。
下面贴出代码,希望能帮到大家。
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import openpyxl
wb =openpyxl.load_workbook("nfzxsfz.xlsx")#此xlsx文件中存着我校的老师所有姓名+身份证号
ws = wb.active
sfz = list()
for x in range(2,200):
sfz.append(ws.cell(row = x,column = 2).value)
wd = webdriver.Chrome("chromedriver")
wd.implicitly_wait(5)
wd.get("http://jiaoshi.hnedu.cn/")
#点击(管理部门和学校管理员登录入口)链接
wd.find_element(By.CSS_SELECTOR,'body > div.link-txt > ul > li:nth-child(1) > a').click()
#切换当前窗口到管理员登录入口
for handle in wd.window_handles:
# 先切换到该窗口
wd.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if '全国教师管理信息系统' in wd.title and '登录入口' not in wd.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
#print(wd.current_url)
#填写登录框中账号
wd.find_element(By.XPATH,'/html/body/div/div[4]/form/div[2]/ul/li[1]/input[1]').send_keys('******') #此处*****是账号
#填写登录框中密码
wd.find_element(By.XPATH,'/html/body/div/div[4]/form/div[2]/ul/li[2]/input[1]').send_keys('*********')#此处*****是密码
#填写验证码
yanzheng = input('请输入验证码:')
wd.find_element(By.XPATH,'/html/body/div/div[4]/form/div[2]/ul/li[5]/input').send_keys(yanzheng)
#点击登录按钮
wd.find_element(By.XPATH,'/html/body/div/div[4]/form/div[2]/div[2]/input[1]').click()
#点击“学分(学时)补录”
wd.find_element(By.XPATH,'/html/body/form/div[5]/div/div/div[1]/div[2]/ul/li[16]/div').click()
#点击 新增 按钮
wd.find_element(By.XPATH,'/html/body/form/div[5]/div/div/div[1]/div[2]/ul/li[16]/ul/li[1]/div/span[4]').click()
#将窗口切换到新增学分对话框中
wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR,'#tabs > div.tabs-panels.tabs-panels-noborder > div:nth-child(2) > div > iframe'))
for x in sfz:
#点击“姓名旁的搜索图标”
wd.find_element(By.XPATH,'/html/body/div[4]/div[2]/div[2]/button[1]/span[2]').click()
wd.switch_to.parent_frame()
#定位到新增学分(学时)补录
wd.switch_to.frame(wd.find_element(By.TAG_NAME,"#addTbBizPxjgbl_iframe"))
#点击姓名后搜索图标
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[1]/td[2]/span[1]').click()
time.sleep(3)
#选择老师
#wd.find_element(By.XPATH,'/html/body/div[6]/div[2]/div[2]/div/div[3]/div[5]/table/tbody/tr[3]/td[2]/a').click()
#换一种查询的方式再处理
wd.find_element(By.XPATH,'/html/body/div[6]/div[2]/div[1]/form/table/tbody/tr[2]/td[2]/input').send_keys(x)
wd.find_element(By.XPATH,'/html/body/div[6]/div[2]/div[1]/form/table/tbody/tr[2]/td[3]/div/a[1]/span').click()
time.sleep(4)
xx = wd.find_element(By.XPATH,'/html/body/div[6]/div[2]/div[2]/div/div[3]/div[5]/table/tbody/tr[2]/td[2]/a')
wd.execute_script("arguments[0].click();",xx)
#设置培训年度
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[2]/td[2]/input').send_keys('2020')
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[2]/td[2]/input').click()
#选择培训类别
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[2]/td[4]/span[1]/span').click()
wd.find_element(By.XPATH,'/html/body/div[7]/table/tbody/tr[6]/td').click()
#填写培训项目名称
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[3]/td[2]/input').send_keys('**中学校本培训')
#培训方式
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[5]/td[2]/span[1]/span').click()
wd.find_element(By.XPATH,'/html/body/div[8]/table/tbody/tr[6]/td').click()
#填写培训学时
wd.find_element(By.XPATH,'/html/body/div[4]/form/table/tbody/tr[5]/td[4]/span[1]/input').send_keys('24') #此处24指当时填进去的24学时
#点击保存
wd.find_element(By.XPATH,'/html/body/div[4]/div/button[1]/span').click()
#此处避免保存时间过长,不能瞬间弹出确定对话框,因此等待一会
time.sleep(4)
wd.switch_to.default_content()
wd.switch_to.frame(wd.find_element(By.CSS_SELECTOR,'#tabs > div.tabs-panels.tabs-panels-noborder > div:nth-child(2) > div > iframe'))
wd.find_element(By.XPATH,'/html/body/div[10]/div/div[2]/button/span').click()
input()