想法缘起
在某方势力的要求,最近每天都要早上在手机完成打卡,所以拾起python的知识想写个轻量脚本来实现自动签到打卡。
一点不必要的说明
本次使用的脚本使用的是python的requests库,是一个HTTP库,可以完成一些http中用到的方法请求,如post、get、put和delete。http中的基本操作它都可以完成,用官方文档的介绍就是Requests is an elegant and simple HTTP library for Python, built for human beings.(Requests是一个优雅而简单的Python HTTP库,是为人类构建的) 使用requests库而不使用selenium库: 网上确实有许多自动签到或者打卡的教程会使用selenium库去实现,但是我觉得selenium库在完成这种签到任务过于臃肿,需要查找页面的元素、登录是要一个个put表单数据、模拟点击.click等等,最重要的是,使用selenium库需要安装相应浏览器的驱动,执行的时候会自动打开本机的浏览器,模拟人工操作,致命的是,完成这个简单脚本可能需要5到6秒,然而轻量快速性和使用requests库不能相比的 但是吧,selenium库在即使不太懂http这些计算机网络知识的情况下也能很快上手,还是比较友好,网上教程也比较多,毕竟普通人能用的才是真正的好东西嘛(doge)
代码介绍
import requests
import sys
import traceback
login_url= ""
target_url= ""
form_data1= {
}
header= {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
def run ( form_data) :
r= requests. post( login_url, data= form_data, headers= header)
if r. status_code == 200 :
res= requests. get( target_url, cookies= r. cookies, headers= header)
def main ( ) :
run( form_data1)
print ( "已处理第一份请求" )
if __name__ == '__main__' :
try :
sys. exit( main( ) )
except Exception as e:
traceback. print_exc( )
import requests
login_url = ""
target_url = ""
form_data1 = { }
header = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
r = requests. post( login_url, data= form_data1, headers= header)
res = requests. get( target_url, cookies= r. cookies, headers= header)
后记
在上面的代码的http通信中,当我们实例化一个“r”的requests时,我们在登录网页post了表单数据和用于伪装的header后,网页服务器就会向这个实例返回(response)一些数据,其中就包括cookies等等其他信息,这样我们才能在下面的get请求带着这个刚刚在服务器返回的cookies去用登录后的身份去完成签到,不然,没有cookies就会显示未登录状态 如果需要在登录后跨页面完成复杂操作,可以实例化一个session,保持会话状态去完成一系列操作