简单的签到代码_Python自动签到

起因

阅读原文食用更佳

最近学校弄了个自动签到打卡的
在身体健康的情况下
本着学tou习lan的精神
重温一下python requests

自动签到

自动签到其实就是代码模拟我们正常签到发的网络请求
携带上正常的参数即可

import库

import requests

import time

import urllib3

from bs4 import BeautifulSoup

# 禁用warning

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# 填写账号密码

userAccounts = [

# ['username1', 'password1'],

# ['username2', 'password2']

]

分析请求

登陆

我们都知道未登录的话会被跳转
所以需要先解决登陆问题
登陆有几种解决方案,session/JWT之类的
分析请求可知比较简单是通过session存储的
那么只要获取到JSESSIONID即可

faaa68aafee1df8efb4fd85642226312.png

从图片可以看出需要参数有三个

  • username

  • password

  • rememberme

那么我们可以通过如下python代码模拟登陆

# 账号密码登陆后返回请求需要headers

def login(username, password):

data = {

'username': username,

'password': password,

'rememberMe': 'false'

}

# 模拟post请求,verify=False禁用https检测

response = requests.post(

url='https://tb.gdei.edu.cn/login', data=data, verify=False)

# 获取setCookie字段

setCookie = response.headers['Set-Cookie']

# 获取JSESSIONID

JSESSIONID = setCookie[:setCookie.index(';')]

# 模拟正常请求构造headers,很多头其实也可以不用

headers = {

'Accept': '*/*',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',

'Connection': 'keep-alive',

'Cookie': JSESSIONID,

'Host': 'tb.gdei.edu.cn',

'Sec-Fetch-Dest': 'empty',

'Sec-Fetch-Mode': 'cors',

'Sec-Fetch-Site': 'same-origin',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',

'X-Requested-With': 'XMLHttpRequest'

}

return headers

签到

学校有两个签到的地方
一个是每天的打卡,点击一下即可
一个是填写体温,早上和中午各一次

0796b28458d89d83cf1ccad12f6d3eaf.png

打卡

点击打卡后可以发现请求是get请求,参数只有一个_=13位数字
嗯13位时间戳https://domain.cn/system/yqdc/yjtb?_=1602048483670

那么就很简单了
解决打卡只需求模拟get请求
生成一个13位时间戳,带上JSESSIONID即可

python代码

# process函数处理打卡和签到

def process():

# 遍历账号

for userAccount in userAccounts:

# 登陆,获取headers

headers = login(userAccount[0], userAccount[1])

# 模拟打卡

requests.get('https://tb.gdei.edu.cn/system/yqdc/yjtb?_=%d' %

(int(round(time.time() * 1000))), verify=False, headers=headers)

print('%s打卡成功' % (userAccount[0]))

体温签到

签到有晨检午检
我们需要知道参数和请求链接是否一样
经过我的测试
发现早上和中午的请求链接是一样的 参数不同

e3cb699bad441b6bed227f6a8e7625a9.png

从页面代码看参数有两部分

  • 需要填写的,如体温,状态:正常/不适

  • 不需要填写的,如系别、宿舍号等,这部分是隐藏input

那么我们可以有以下思路
①访问页面
②用BeautifulSoup解析页面获取不需要填写的参数
③手动填入体温和状态
④发起请求

python代码

# 构造体温签到参数

def getMrcjParams(headers):

# get请求

response = requests.get(

url='https://tb.gdei.edu.cn/system/mrcj/add', headers=headers, verify=False)

# BeautifulSoup解析html代码

soup = BeautifulSoup(response.text, 'lxml')

# 构造params

params = {

# 'id': '',

# 'bushi': '',

# 找到id为username的input标签的value值

'username': soup.find('input', id='username')['value'],

'suse': soup.find('input', id='suse')['value'],

'fanghao': soup.find('input', id='fanghao')['value'],

'phone': soup.find('input', id='phone')['value'],

'tbname': soup.find('input', id='tbname')['value'],

'xh': soup.find('input', id='xh')['value'],

'depid': soup.find('input', id='depid')['value'],

'xm': soup.find('input', id='xm')['value'],

'dep': soup.find('input', id='dep')['value'],

'banji': soup.find('input', id='banji')['value'],

# 需要我们填写的值

'tiwen': 36.6,

'zt': '正常'

}

return params

# process函数在原有基础上增加体温签到代码

def process():

# 遍历账号

for userAccount in userAccounts:

# 登陆,获取headers

headers = login(userAccount[0], userAccount[1])

# 模拟打卡

requests.get('https://tb.gdei.edu.cn/system/yqdc/yjtb?_=%d' %

(int(round(time.time() * 1000))), verify=False, headers=headers)

print('%s打卡成功' % (userAccount[0]))

# 获取体温签到参数

mrcjParams = getMrcjParams(headers)

print(mrcjParams)

# post请求,注意指定params和headers

requests.post(url='https://tb.gdei.edu.cn/system/mrcj/add',

params=mrcjParams, headers=headers, verify=False)

print('%s体温签到成功' % (userAccount[0]))

# 最后记得main函数调用process执行

if __name__ == '__main__':

process()

自动定时执行

win10下使用自带的定时任务

添加定时任务

首先我们需要编写一个bat用于win10自动执行

:: xxx.bat

:: 这个bat用于让win10执行,所以内容为python 代码文件

python xxx.py

接下来需要添加定时任务,让win10自动执行我们上面编写的文件

:: 可以直接powershell执行

:: /tn 定时任务的名称

:: /st startTime

:: /sc daily 每天

:: /tr 执行程序

schtasks /create /tn 晨检 /st 09:00 /sc daily /tr C:\Users\x5322\Desktop\xxx.bat

schtasks /create /tn 午检 /st 12:00 /sc daily /tr C:\Users\x5322\Desktop\xxx.bat

删除定时任务

schtasks /delete/ /tn 晨检

schtasks /delete/ /tn 午检

::: tip 通过'管理'

右键我的电脑->管理->任务计划程序->任务计划程序库也可以进行设置和删除

:::

总结

重温了一下requests的使用
以及使用函数来编写python
之前写的python文件基本都是直接写
没有函数,看起来乱乱的
代码的结构确实会好看很多哈哈

另外就是前面的体温我是写死的36.6
其实也可以让其随机在36.5-36.9这样子
就不会固定了太过明显(haipa)

定时也可以用程序自身来实现
但需要一直运行就觉得用win10自带的来实现也可以

嗯同样的我们也可以这样子来搜集网抑云热评

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值