文章目录
前期准备
需要下载selenium库 和 Edge浏览器插件
具体下载可以看这篇博客:
selenium和Edge插件的安装
当然看文档也是必不可少的 推荐这个文档是针对Edge
selenium文档
selenium一定要下载selenium4的版本、对Edge很多操作进行了支持
一、前言
本篇不会涉及教程、主要是记录一下解决代码、只基于博主本校
二、步骤
1.引入库
from time import sleep
#sleep 可以让程序停一下给网页加载时间
from selenium import webdriver
#WebDriver 允许你通过模拟用户交互来自动执行 Microsoft Edge
from selenium.webdriver.common.by import By
#By 是提供定位界面的
from selenium.webdriver.edge.options import Options
#最后一个是无头浏览器的库 也就是可以后台执行 看不到执行过程
3.无显运行
也就是不显示浏览器进行的过程,如果想要看到运行过程,可以去掉几行代码即可
在你刚开始写的时候肯定是需要显示的,当你写完调试完即可使用无头后台运行
无显示方法
from selenium.webdriver.edge.options import Options
#这是selenium4 专门对edge 的库 通过此库可以实现无头浏览器
options = Options() #创建Option对象
options.add_argument("headless") # 添加无头模式参数
wd = webdriver.Edge(options=options) #把参数放到webdriver对象里
所需网址和参数
#好像暴露学校了 进入填报网页
url1 = 'https://authserver.szpt.edu.cn/authserver/login?service=https://i.szpt.edu.cn/deal_with_st'
# 这里需要url2 是因为web端切换到申报界面很卡,所以提前用selenium库抓取了手机签到界面
# 直接一步跳转到签到 可以省略了许多步骤 需要先登录完才跳转的进去
url2 = 'https://ehall.szpt.edu.cn:443/amp-auth-adapter/login?service=https%3A%2F%2Fehall.szpt.edu.cn%3A443%2Fpublicappinternet%2Fsys%2Fszptpubxsjkxxbs%2F*default%2Findex.do%3FnodeId%3D0%26taskId%3D0%26processInstanceId%3D0%26instId%3D0%26defId%3D0%26defKey%3D0'
user_name = '填自己账号'
passwd = '填自己密码'
微信推送提醒
「Server酱」是从服务器、路由器等设备上推消息到手机的工具。
配置文件中填入SendKey,即可使用
你也可以自己往 https://sctapi.ftqq.com/.send 发送请求,就可以收到消息啦
具体可以去server酱的网站去查看server酱
免费使用但每天只能使用五次
def post_send():
url = f'https://sctapi.ftqq.com/这里填自己的SENDKEY.send?title=这里填你要发送的内容需要发中文需要转成urlencode编码'
wd.get(url) #打开url完成发送
完整代码
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
url1 = 'https://authserver.szpt.edu.cn/authserver/login?service=https://i.szpt.edu.cn/deal_with_st'
url2 = 'https://ehall.szpt.edu.cn:443/amp-auth-adapter/login?service=https%3A%2F%2Fehall.szpt.edu.cn%3A443%2Fpublicappinternet%2Fsys%2Fszptpubxsjkxxbs%2F*default%2Findex.do%3FnodeId%3D0%26taskId%3D0%26processInstanceId%3D0%26instId%3D0%26defId%3D0%26defKey%3D0'
user_name = '填自己账号'
passwd = '填自己密码'
def to_login(user_name, passwd): #去登录函数
wd.find_element(By.ID, 'username').send_keys(user_name)
sleep(0.5)
wd.find_element(By.ID, 'password').send_keys(passwd+'\n') #这里加\n 代表enter提交
sleep(1)
def do_sign(): #去签到函数
sleep(1)
# 进入健康填报界面
wd.get(url2)
sleep(3)
# 跳转进入提交
wd.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/button').click()
sleep(3)
# 我承诺按钮
wd.find_element(By.XPATH, '//*[@id="app"]/div/div[3]/div/a/div[2]/div[1]/div/label/span[1]/span').click()
sleep(2)
# 我承诺 后点击提交
wd.find_element(By.XPATH, '//*[@id="app"]/div/button').click()
sleep(2)
# 最后的提交按钮 button[1]是取消 可以用来测试 [2] 是提交
wd.find_element(By.XPATH, '//*[@class="mint-msgbox-wrapper"]/div/div[3]/button[2]').click()
sleep(3)
def post_send(): #server酱调用
url = f'https://sctapi.ftqq.com/这里填自己的SENDKEY.send?title=这里填你要发送的内容需要发中文需要转成urlencode编码'
wd.get(url)
if __name__ == '__main__':
options = Options()
options.add_argument("headless") # 无显示模式
wd = webdriver.Edge(options=options) #如果希望看到运行界面把括号里的去内容掉即可
wd.get(url1)
wd.maximize_window()
to_login(user_name, passwd)
do_sign()
print("成功打卡")
post_send()
wd.quit()
提醒
此代码只自动提交不改动任何参数,如果需要改动日期等填报信息请自行编写代码改动