、模拟登陆
打开登陆界面,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编写自动化脚本(无验证码)相关推荐

  1. 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 ...

  2. python编写自动化脚本 与shell_脚本安装Discuz论坛(shell + Python 实现自动化安装)...

    实验环境 1.shell 脚本:linux centos 7 系统 2.Python shell 脚本:window 系统 3.其他:python selenium 模块,谷歌浏览器, 谷歌浏览器驱动 ...

  3. python编写自动化脚本工具_python自动化工具之pywinauto实例详解

    本文实例为大家分享了python自动化工具pywinauto,供大家参考,具体内容如下 一.win环境应用自动化 1.浏览器中下载 2.在cmd下启动:python get-pip.py 3.在cmd ...

  4. python编写自动化脚本工具_Python自动化构建工具scons使用入门笔记

    这段时间用到了scons,这里总结下,也方便我以后查阅. 一.安装scons Linux环境(以CentOS为例) 1.yum安装 yum install scons 2.源码安装 安装scons:p ...

  5. 使用nodejs编写自动化脚本,真香!

    使用nodejs编写自动化脚本,真香! 说到写脚本,最为人熟知的语言必然是shell,再者python,当然现在也出现了很多界面友好,支持可视化拖动编写脚本的软件,如quiker等.但本文要介绍的是n ...

  6. Python + selenium自动化工具 + 滑块验证码+点选验证码,实现模拟登录“中国铁路网12306”

    文章目录 一.模拟登录"中国铁路网12306 1.引入库 2.初始化 3.将点选验证码图片,通过人工打码,返回目标像素位置(json格式). 4.点选验证码位置得到后,需要鼠标左击进行模拟人 ...

  7. Python接口自动化脚本业务框架总概(一)

    目录 接口自动化框架目录 基础类封装概览 基础类封装方法详解 Log.py文件 Request.py文件 Python是目前主流的接口自动化脚本语言之一. 本专栏将联系业务介绍使用python接口自动 ...

  8. python写自动脚本下载_如何使用python写自动化脚本?

    第一次听到脚本,会不会觉得特别厉害呢?小编就有这样的感觉,事实上,脚本确实真的很厉害,能解决我们软件运行的大小问题,比如游戏时候,脚本也是很常见的哦~下面就教大家写脚本,一起来学习下吧~ 准备工具: ...

  9. 怎么去使用python写自动化脚本?

      第一次听到脚本,会不会觉得特别厉害呢?小编就有这样的感觉,事实上,脚本确实真的很厉害,能解决我们软件运行的大小问题,比如游戏时候,脚本也是很常见的哦下面就教大家写脚本,一起来学习下吧 准备工具: ...

最新文章

  1. Intel Optane PMEM 概览
  2. 某程序员吐槽清华北大不值钱了!过去清北毕业生去企业上班就是丢人现眼!现在互联网基层员工一堆清北人!清北怎么混成这样了?...
  3. “超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过
  4. Xamarin Essentials教程实现数据的传输功能实例
  5. HDU4858 项目管理 其他
  6. Win7 安装资料及教程
  7. 奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错
  8. python怎么发送邮件_Python面试题之如何用Python来发送邮件?
  9. java并发总结思维导图
  10. L1-015 跟奥巴马一起画方块 (15 分) — 团体程序设计天梯赛
  11. 图像频域增强:傅里叶变换
  12. 翻山越岭上uvaoj
  13. 您的计算机无法访问dota2服务器,一招解决DOTA2国服客户端无法启动问题
  14. 标签打印软件如何输出双面打印的文档
  15. Buck-Boost电路
  16. 线上点餐APP开发基本功能
  17. 计算机系一班班会,迎新 · 破冰会|“情暖计算机,友爱一九一”——记计算机类19-1班新生破冰班会...
  18. 文学类的小说,言情类的,没有排行榜上的
  19. DbUtils框架(这是一个耗时耗力的差事)
  20. 简单的射击类Android游戏--《环形射击》

热门文章

  1. 使用python调用matlab方法
  2. geometry-api-java 学习笔记(八)分割Intersection
  3. Akka框架——第一节:并发编程简介
  4. Google WideDeep Model
  5. Apache Iceberg 快速入门
  6. 如何在生产环境使用Btrace进行调试
  7. 世界最厉害的14位程序员,你认识几个?
  8. 第148天:js+rem动态计算font-size的大小,适配各种手机设备
  9. 单链表的整表创建以及整表删除
  10. druid-StatViewServlet配置