Python编写自动化脚本(无验证码)
一、模拟登陆
打开登陆界面,F12,打开开发者工具(大部分浏览器都自带),选择Network,如果没有显示,就把该页面刷新一下
我这里登陆的网站是 http://x.x.x.x/?q=custom_user_login
输入账号,密码(这里我的密码填写的1,用做测试),原本很短的密码却变得很长,这里我们就有一个猜想,这里的password值在客户端进行了加密,所以我们右键审查该password表单元素
由上图可知这里果然进行了加密,于是我们把下图中type="password"的password删除,查看密码明文,看看他究竟是怎么进行加密的
由上图看出1被加密成了32位16进制数,并且根据上图中的hex_md5,于是猜想他是md5加密,以hex(16进制)显示,在 https://www.cmd5.com/ 进行验证
由上图可知,他果然是在前端进行了一次md5加密
随后我们进行一次正确的登陆,获取账号密的变量名,如下图:
现在开始编写第一段代码,登陆账号:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author:1stPeakimport requests
import hashlib
import rerequest = requests.Session() #requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookiesdef login(username,password):login_url = "http://x.x.x.x/?q=custom_user_login"md = hashlib.md5()md.update(password.encode('utf-8'))password = md.hexdigest()data = {"username": username,"password": password}try:req = request.post(login_url,data=data,headers=header)req.encoding = 'utf-8'#print(req.text) #这个用来测试是否登陆成功(查看登陆前与登录后的源代码有何差别)if "请输入注册时填写的手机号" not in req.text:print("登陆成功")else:print("登录失败")except:print("未知错误")if __name__ == '__main__':username="你的用户名"password="你的密码"header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}login(username,password)
二、申请课程
打开burpsuite,开始抓包,再点击报名学习
抓到下图的POST请求(申请课程请求)
请求url为/?q=node/75827/people/apply
输入url后打开
再打开 http://x.x.x.x/?q=node/75827, 检验是否申请成功
申请课程代码段:
apply_url="http://x.x.x.x/?q=node/75926/people/apply"req = request.get(apply_url,headers=header)#print(req.text)try:if "message" in req.text:print("申请成功")else:print("申请失败")except:print("未知错误")
为了可以申请更多的课程,我们修改一下代码:
def apply():for i in range(75926,75927):apply_url = "http://x.x.x.x/?q=node/"+str(i)+"/people/apply"try:req = request.get(apply_url,headers=header)if "success" in req.text:print(str(i)+"课程申请成功")return iexcept:print(str(i) + "申请失败")
三、刷课程
study = "http://x.x.x.x/?q=items/student/study/75926"try:req = request.get(study, headers=header)req.encoding = 'utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study = re.findall(G,req.text)for study_url_last in study:study_url_all = "http://39.106.4.51/" + study_url_lasttry:request.get(study_url_all,headers=header,timeout=4)print(study_url_all+"刷课成功")except:print(study_url_all+"刷课失败")except:pass
为了可以刷更多的课程,我们来完善一下代码:
def study():study_url = "http://x.x.x.x/?q=items/student/study/"+str(apply())try:req = request.get(study_url,headers=header)req.encoding='utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study_url_list = re.findall(G,req.text,re.M|re.S)for study_url_last in study_url_list:study_url_all = "http://39.106.4.51/" + study_url_lasttry:req = request.get(study_url_all,headers=header,timeout=4)print(study_url_all+"学习完成")except:print(study_url_all+"学习失败")except:pass
四、完整代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author:1stPeakimport requests
import hashlib
import rerequest = requests.Session() #requests库的session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookiesdef login(username,password):login_url = "http://x.x.x.x/?q=custom_user_login"md = hashlib.md5()md.update(password.encode('utf-8'))password = md.hexdigest()data = {"username": username,"password": password}try:req = request.post(login_url,data=data,headers=header)req.encoding = 'utf-8'#print(req.text) #这个用来测试是否登陆成功(查看登陆前与登录后的源代码有何差别)if "请输入注册时填写的手机号" not in req.text:print("登陆成功")else:print("登录失败")except:print("未知错误")def apply():for i in range(75926,75927):apply_url = "http://x.x.x.x/?q=node/"+str(i)+"/people/apply"try:req = request.get(apply_url,headers=header)if "success" in req.text:print(str(i)+"课程申请成功")return iexcept:print(str(i) + "申请失败")def study():study_url = "http://x.x.x.x/?q=items/student/study/"+str(apply())try:req = request.get(study_url,headers=header)req.encoding = 'utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study_url_list = re.findall(G,req.text,re.M|re.S)for study_url_last in study_url_list:study_url_all = "http://39.106.4.51/" + study_url_lasttry:request.get(study_url_all, headers=header, timeout=6)print(study_url_all + "学习完成")except:print(study_url_all + "学习失败")except:passif __name__ == '__main__':username="你的用户名"password="你的密码"header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}login(username,password)study() #运行study函数的时候会自动运行apply函数,所以不需要再写apply()
注:视频文件无法刷成功,电脑自己看一遍还是不能完成任务点,不知其原因,如有知道或解决办法,请评论留言,Thank you~
更新:此次文章仅供学习参考,不再更新。
其他图片:
Python编写自动化脚本(无验证码)相关推荐
- python编写自动化脚本工具_blog/技巧与工具04-python控制鼠标自动化点击脚本.md at master · tigeroses/blog · GitHub...
title date tags category 技巧与工具04-python控制鼠标自动化点击脚本 2017-06-24 10:04:28 -0700 python pyautogui tools ...
- python编写自动化脚本 与shell_脚本安装Discuz论坛(shell + Python 实现自动化安装)...
实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...
- python编写自动化脚本工具_python自动化工具之pywinauto实例详解
本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一.win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py 3.在cmd ...
- python编写自动化脚本工具_Python自动化构建工具scons使用入门笔记
这段时间用到了scons,这里总结下,也方便我以后查阅. 一.安装scons Linux环境(以CentOS为例) 1.yum安装 yum install scons 2.源码安装 安装scons:p ...
- 使用nodejs编写自动化脚本,真香!
使用nodejs编写自动化脚本,真香! 说到写脚本,最为人熟知的语言必然是shell,再者python,当然现在也出现了很多界面友好,支持可视化拖动编写脚本的软件,如quiker等.但本文要介绍的是n ...
- Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”
文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...
- Python接口自动化脚本业务框架总概(一)
目录 接口自动化框架目录 基础类封装概览 基础类封装方法详解 Log.py文件 Request.py文件 Python是目前主流的接口自动化脚本语言之一. 本专栏将联系业务介绍使用python接口自动 ...
- python写自动脚本下载_如何使用python写自动化脚本?
第一次听到脚本,会不会觉得特别厉害呢?小编就有这样的感觉,事实上,脚本确实真的很厉害,能解决我们软件运行的大小问题,比如游戏时候,脚本也是很常见的哦~下面就教大家写脚本,一起来学习下吧~ 准备工具: ...
- 怎么去使用python写自动化脚本?
第一次听到脚本,会不会觉得特别厉害呢?小编就有这样的感觉,事实上,脚本确实真的很厉害,能解决我们软件运行的大小问题,比如游戏时候,脚本也是很常见的哦下面就教大家写脚本,一起来学习下吧 准备工具: ...
最新文章
- Intel Optane PMEM 概览
- 某程序员吐槽清华北大不值钱了!过去清北毕业生去企业上班就是丢人现眼!现在互联网基层员工一堆清北人!清北怎么混成这样了?...
- “超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过
- Xamarin Essentials教程实现数据的传输功能实例
- HDU4858 项目管理 其他
- Win7 安装资料及教程
- 奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错
- python怎么发送邮件_Python面试题之如何用Python来发送邮件?
- java并发总结思维导图
- L1-015 跟奥巴马一起画方块 (15 分) — 团体程序设计天梯赛
- 图像频域增强:傅里叶变换
- 翻山越岭上uvaoj
- 您的计算机无法访问dota2服务器,一招解决DOTA2国服客户端无法启动问题
- 标签打印软件如何输出双面打印的文档
- Buck-Boost电路
- 线上点餐APP开发基本功能
- 计算机系一班班会,迎新 · 破冰会|“情暖计算机,友爱一九一”——记计算机类19-1班新生破冰班会...
- 文学类的小说,言情类的,没有排行榜上的
- DbUtils框架(这是一个耗时耗力的差事)
- 简单的射击类Android游戏--《环形射击》