想必在座的各位学生党也和老肥我一样,经常会忘记每日的疫情打卡。人会遗忘,但程序不会,每日定时自动运行代码可以帮助我们完成打卡填报,今天就和大家分享一下我的基于Selenium的疫情信息自动填报脚本。
Selenium是一个Web自动化工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,我们的目标就是使用Selenium模拟我们自己进行填报操作。
首先设置headless
参数,这样我们可以不显示Selenium的运行,俗称「无头模式」。
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
我们使用get
方法访问填报的入口网址,接着便是自动登录部分。
我们先找到账号密码的元素所在(按下F12,鼠标点击选择网页中的账号以及密码元素),这里采用xpath
的方法寻找元素,找到之后使用send_keys
向该位置输入字符串,也就是账号和密码,最后找到登录按钮元素并进行点击便可完成登录过程。
driver.find_element_by_xpath('//*[@id="emap-rsids-content"]/div/div[3]/div/div[1]/div/div/div/input').send_keys(USER_NAME)
driver.find_element_by_xpath('//*[@id="emap-rsids-content"]/div/div[3]/div/div[2]/div/div[1]/div/input').send_keys(USER_PASSWORD)
driver.find_element_by_xpath('//*[@id="emap-rsids-content"]/div/div[3]/div/div[3]/div/button/span').click()
然后我们通过查询得到疫情填报的应用入口,进入该入口并且点击提交按钮进行表单的提交。
每个需要进行页面跳转的部分,可以添加implicitly_wait
进行隐式等待,而对于新页面我们可以通过切换窗口的方法到最新页。
windows = driver.window_handles
driver.switch_to.window(windows[-1])
上述便是用Selenium完成从用户登录到疫情填报提交的完整过程,为了能够完成每日填报,我们可以在任务计划程序库(windows)中加入该计划。
image
在程序或脚本
位置填入Python运行的完整路径,例如F:AnacondaAnapython.exe
, 在添加参数
位置填入脚本的完整路径, 例如F:a.py
。
如此一来,只要将这短短几十行代码的脚本部署到一台时刻开启并处于联网状态的电脑上,我们就无需再为填报而头疼了。