·
项目目标:
由于每天的不厌其烦的晚点名,让我心生一个想法,能不能让服务器帮我点名(博主口袋空空这边使用的是百度智能云的CFC 函数调用功能实现的定时晚点名),于是凭着自己的学习能力我准备尝试一下写一个自动晚点名的工具(基于python编程),python写很方便,唯一一个缺点就是没有相关的技术帮助文档,只能靠自己摸索。
1.实现本地晚点名
2.百度智能云CFC 函数调用实现自动晚点名
注:本文旨在倡导大家学习,请大家不要做“违法乱纪”的事情!!!
项目环境(本地):
- win10即可
- 安装pycharm
- 安装python(python3.6及以上)
- 安装包 time、requests、bs4、re
pycharm安装教程:Pycharm下载及设置文字大小快捷键_嵌入式up的博客-CSDN博客https://blog.csdn.net/oxygen23333/article/details/126582559python安装依赖包教程: 【python养成】:pip3如何安装依赖库和换国内源安装库_嵌入式up的博客-CSDN博客
https://blog.csdn.net/oxygen23333/article/details/127100477
项目思路(本地):
- 安装环境,使用pycharm更简单,装载依赖包都操作都很简单,是不可多得的生产力工具。可以使用打开cmd,输入python查看是否安装好了python,这些在以往的文章里面都有讲过,大家自行翻阅以前的文章,第一步解决环境问题!
- 先学习了解Python基础语法、再学习 request、bs4、re的用法。
- 学习了解Google Chrome、chromedriver插件的用法,学会如何查看html代码和form表单数据,用chromedriver可以查看。安装好chromedriver插件可以快捷键F12打开。
- 以上了解的差不多就可以开始编程,对网页进行解析,提交账号密码登录学校易班系统、再打开晚点名链接、提交各类数据表单之后,晚点名即可成功!
项目代码(本地):
import time
import requests
from bs4 import BeautifulSoup
import re
class DouLogin(object):
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2006J10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 ('
'KHTML, like Gecko) Version/4.0 Chrome/89.0.4389.72 MQQBrowser/6.2 TBS/046011 Mobile '
'Safari/537.36 V1_AND_SQ_8.8.83_2654_YYB_D A_8088300 QQ/8.8.83.7540 NetType/4G WebP/0.3.0 '
'Pixel/1080 StatusBarHeight/96 SimpleUISwitch/0 QQTheme/1000 InMagicWin/0 StudyMode/0 '
'CurrentMode/0 CurrentFontScale/1.0 GlobalDensityScale/0.9818182 AppId/537114460'}
self.login_url = 'http://xg.htc.edu.cn'
self.session = requests.Session()
def login(self, email, password):
html_yiban = self.session.get(self.login_url).content
bsObj = BeautifulSoup(html_yiban, "html.parser")
VIEWSTATE = bsObj.find('input', {'id': '__VIEWSTATE'}).attrs['value']
VIEWSTATEGENERATOR = bsObj.find('input', {'id': '__VIEWSTATEGENERATOR'}).attrs['value']
EVENTVALIDATION = bsObj.find('input', {'id': '__EVENTVALIDATION'}).attrs['value']
post_data = {
'__LASTFOCUS': '',
'__EVENTTARGET': '',
'__EVENTARGUMENT': '',
"__VIEWSTATE": VIEWSTATE,
"__VIEWSTATEGENERATOR": VIEWSTATEGENERATOR,
"__EVENTVALIDATION": EVENTVALIDATION,
'ctl06': email,
'ctl08': password,
'Button1': '确认登录',
}
response = self.session.post(self.login_url, data=post_data, headers=self.headers)
# print(response.text)
time.sleep(1)
soup = BeautifulSoup(response.text, 'html.parser')
urls = soup.find("table", class_="maintab").text
rse = urls.strip()
# print(rse)
# 2XX 表示连接成功,3XX 表示跳转 , 4XX 客户端错误 , 500 服务器错误
if response.status_code == 200 and rse == "合肥职院线上学生社区":
print('账号密码已登录成功')
else:
print('账号密码登录失败,请重试!')
def Yiban_Later(self, pic_flag):
x = "400"
y = "700"
r = "1"
url_5 = 'http://xg.htc.edu.cn/gygl/xswdm.aspx'
location = {"longitude": 117.395039, "latitude": 31.909085, "accuracy": 32, "time": '',
"address": "安徽省 合肥市 瑶海区 关井路 1309号 靠近杨草塘"},
# 选择合适的图片路径 需要在下面相应目录创建文件夹,或者将路径改成自己创建的文件夹即可
if pic_flag == 1:
file = {"file1": ("1.jpg", open('G:/pythonProject/Webyiban/picture/1.jpg', "rb"))}
if pic_flag == 2:
file = {"file1": ("2.jpg", open('G:/pythonProject/Webyiban/picture/2.jpg', "rb"))}
html_yiban = self.session.get(url_5).content
bsObj = BeautifulSoup(html_yiban, "html.parser")
VIEWSTATE = bsObj.find('input', {'id': '__VIEWSTATE'}).attrs['value']
VIEWSTATEGENERATOR = bsObj.find('input', {'id': '__VIEWSTATEGENERATOR'}).attrs['value']
EVENTVALIDATION = bsObj.find('input', {'id': '__EVENTVALIDATION'}).attrs['value']
paydata = {
"__VIEWSTATE": VIEWSTATE,
"__VIEWSTATEGENERATOR": VIEWSTATEGENERATOR,
"__EVENTVALIDATION": EVENTVALIDATION,
"file1": file,
"x": x,
"y": y,
"r": r,
"wzhyb": location,
"Button1": "登记"
}
response_4 = self.session.post(url_5, headers=self.headers, data=paydata, files=file)
soup = BeautifulSoup(response_4.text, 'html.parser')
urls = soup.find_all('span', id='news')
p = re.compile(r'[\u4e00-\u9fa5]')
rse = ''.join(re.findall(p, str(urls)))
print(rse)
if response_4.status_code == 200 and rse == "保存个人信息成功登记成功":
print('晚点名已提交成功')
else:
print('晚点名失败,请重试!')
if __name__ == "__main__":
login = DouLogin()
Later_dict = ['1735xxxxx', 'lhbxxxxx', '181xxxxxxx', 'xxxxx'] #账号 和 密码
flag = 1
if flag == 1:
login.login(Later_dict[0], Later_dict[1])
if flag == 2:
login.login(Later_dict[2], Later_dict[3])
login.Yiban_Later(flag)
本文将代码挂上pycharm中可以直接使用!
项目环境(云函数):
总结
有需要联系工作号 vx:buildupup