[python网络应用]用python帮你实现疫情自动填报(第一期,目前实现半自动,实现全自动会继续更新)(西北工业大学-翱翔门户疫情填报)

        2020年之后是大学生的估计都有一段被导员催着天天进行疫情填报的难忘经历,那么假如这件事可以一劳永逸这当然是件比较方便的事情~(当然记得要符合实际情况可不能乱上报哈)

        本文是作者参考大量文章并结合自己的学习经验而成的心血之作,其中的技术包括selenium的浏览器webdriver配置,打开网页并输入账号和密码,用python对网页执行嵌入的javascript代码(这需要会看一点网页源代码),对网页的多选框checkbox(“本人承诺以上信息准确无误”选框)进行自动选中等,附加了用python如何调出浏览器开发者模式

        目前第二期工作已经完成(第二期是实现填报完之后利用我的公众号《FPRSP的小屋》给自己的手机发短信提示“疫情填报完成”,并且实现定时填报(这要求程序始终运行,全程联网且可能休眠时就不会工作),由于需要处理的个人信息比较多(不可以泄露相关的隐私信息),就放在下一期)(如果想获取其他资源的话可以微信搜索关注公众号“FPRSP的小屋”,因为仅仅是大概一个月前创建的所以功能还不完善)

        如果说把这个做成什么样的比较满意,我肯定认为做成手机的APP是最方便的(无奈本人目前太菜搞不了),我也试图让电脑在指定时间启动联网并且填完之后关掉电脑/锁屏的方式,包括在管理里面添加任务(但这样测试后执行不了),目前想了几种感觉比较有可能实现的方式(这个如果实现,就应当可以实现全自动化的疫情填报):

1.利用腾讯云函数,每天定时访问相关网页并执行相关操作,执行脚本并进行疫情填报

2.设置开机自启,每天定时进行重启,并调用脚本尝试连接wifi,连接wifi后执行程序进行填报

3.利用远程控制,让手机使用UDP/TCP定时向电脑广播信息,让电脑启动并且执行相关操作

4.使用pyinstaller将python脚本打包成.exe程序并且试图添加到任务管理器中(这个可能仍然无法运行)(由于电脑pyinstaller老是出错所以就鸽了。。)

一、提前配置webdriver:

参考文章:python+selenium 实现自动化交互

你需要使用chrome://version命令来查看自己谷歌浏览器的版本,然后到网站http://chromedriver.storage.googleapis.com/index.html

下载对应版本的webdriver(如果确实没有可以更新一下chrome)

然后放到(其实是随便一个位置,这个位置要记下来,在代码里面用)

二、 实现过程:
这里先贴上代码:(你需要改动里面三个内容)

# -*- coding:utf-8 -*-
import selenium
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import time

def submit():
    try:
        driver = webdriver.Chrome(executable_path='你存储webdriver的位置\chromedriver.exe') #填写路径全名

        url=r'https://uis.nwpu.edu.cn/cas/login?service=https://ecampus.nwpu.edu.cn/'
        driver.get(url)    #使用get函数得到相应的url(地址)

        username = driver.find_element(by='id',value='username')
        StudentID='你的学号'
        username.send_keys(StudentID)
        #对应106行
        #       <div>
        #       <input class="el-input__inner"
        #       placeholder="请输入用户名/手机/邮箱/证件号" title="请输入用户名/手机/邮箱/证件号" id="username"

        secretKey = driver.find_element(by='id',value='password')
        #这里可以用129行或者133行的"name"-->'password'  或者 id:"password"
        KeyNum='你的密码'
        secretKey.send_keys(KeyNum)

        logbtn = driver.find_element(by='name',value='submit')
        #submit在148行被找到
        logbtn.click()
        driver.get('http://yqtb.nwpu.edu.cn/wx/xg/yz-mobile/index.jsp')
        driver.get('http://yqtb.nwpu.edu.cn/wx/ry/jrsb.jsp')   #访问疫情填报界面

        #----------------在console控制台输入js代码---------
        #使用execute_script来实现为此网页输入javascript代码
        driver.execute_script('''
        javascript:go_subfx();
        ''')


        #使用这些代码来选择checkbox中的内容
        a=driver.find_element_by_class_name("weui-cell__hd")
        a.click()

        driver.execute_script('''
        var inputs=document.getElementById("brcn");
        inputs.checked=true;
        ''')
        #注意!!!对于复选框,使用.check来获取是否选中,直接利用此来修改其中的值

        driver.execute_script('''
        javascript:savefx();
        ''')
        time.sleep(1)
        driver.close()
        #发送信息
    except Exception as e:
        print("疫情填报失败,请检查网络")
        pass

if __name__=='__main__':
    submit()

其中有的地方我需要讲解一下:

首先自动使用chrome浏览器(用get来登录网站,注意要有一个参数executable_path来填写webdriver的位置)

登录网站翱翔门户:https://uis.nwpu.edu.cn/cas/login?service=https://ecampus.nwpu.edu.cn/

界面如下:

 这里是需要你手动输入用户名和密码的,此时,右键“查看网络源代码”或者按下f12进入开发者模式

找到登录框的代码部分:

 这里我们可以看到登录框的id是'username',

接下来使用driver.find_element_by_id(可以直接使用find_element,by写id)获得相应的部分,可以参考下面这篇文章:Python自动化页面操作

然后用send_keys输入账号和密码

成功登录后,直接访问网页yqtb.nwpu.edu.cn/wx/ry/jrsb.jsp打开每日疫情填报界面

下来是点击这个按钮“提交填报信息”

从网页源代码可以看到,这个按钮根本没有id,而且试图用其他元素get也会失败,其实他就是执行了javascript的代码

 鼠标移动到按钮上,可以看到,左下角有弹出javascript:go subfx();

你可以尝试在这个界面打开f12,然后再console(控制台)里面输入这个代码,于是成功自动点击

这里使用webdriver中的execute_script为网页执行javascript代码

具体如何使用,我是参考了selenium控制浏览器执行js代码(以及一系列类似的文章)

成功点击完成这个按钮之后,接下来就是“本人承诺”这一栏填写

 在源代码中,看到相应的内容:
(因为这个的type是checkbox,所以使用a.click()是没用的!只会返回一堆错误代码)

 于是我参考了许多文章,找到了要的那一篇:

JS根据id、value值对checkbox设置选中状态

关键代码是  inputs[i].checked = true;

这里由于只有一个选框,用  a.checked=true;

然后控制execute_script执行javascript代码 ...

于是成功选择(“已核实以上数据”选框)

接下来就是直接js点击“填报完成”,然后关闭网页

这里附上如何自动调出开发者F12模式:selenium 模拟按键F12

三、运行结果(视频略去,不能上传视频QAQ)

(这个需要你手动启动程序,或者写个for让这个程序一直运行,再用datetime库来控制定时执行)

 另外,我试过在计算机-管理-定时执行任务中,添加这个任务到定时任务中,但是在电脑睡眠状态下(就是你合上笔记本)它就无法执行(就算把“唤醒计算机执行”和“不管用户是否登录都要运行”打开也不行,使用bat控制也不行,这些都是我用发短信的形式验证过的,具体我会有下一期),但是对于计算机系的学生,比如有一个总会打开计算机的时间点,可以试试下面的方法:

windows定时执行py脚本_Yanghongru的博客-CSDN博客

创建定时任务

或者在cmd(win+R)中输入命令来创建定时任务(这个应该会更稳定一点)

Windows使用SCHTASKS 命令执行定时任务_刘李404not_found的博客-CSDN博客

此时可输入代码(把那个文件改成你想要的.py):

SCHTASKS /Create /TN calc /TR C:\windows\system32\calc.exe /SC DAILY /ST 9:00
#创建一个名字叫calc的计划任务,每天9点执行calc.exe文件

然后只要你在相应的时间点电脑处于登录状态(不可以锁屏)

它就会自动地执行帮你进行疫情填报啦~

本文章为个人原创,转载请附上链接,相关的参考文章已经在文章里面大都链接了,感谢一直以来对我的支持~

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序菜鸟一只

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值