吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1856|回复: 12
上一主题 下一主题
收起左侧

[Python 原创] 学习通DrissionPage模拟登录及获取课程分析(一)

[复制链接]
跳转到指定楼层
楼主
Lengxiy 发表于 2024-6-21 14:29 回帖奖励
本帖最后由 Lengxiy 于 2024-6-21 14:39 编辑

前言
DrissionPage官网简介

官网地址:https://drissionpage.cn/
官网里面也有一些简单的案例分析,有兴趣的也可以自行体会着用


用DrissionPage的缘由
之前书写过一篇智慧职教教师自动批作业一些相关python代码示例以及简单的分析做参考
这个文章,我用的是selenium,request这两个库为主
实际上我不太会分析加解密,所以一般用模拟浏览器登录的比较多
但是用下来发现前面提到的两个库极其的繁琐以及不太好用,直到有位热心人@HalaTest在评论区跟我说了一声试试看用DrissionPage后,发现还有这个好玩的东西后,效率逐渐提升了很多


案例介绍
此次的案例的话,主要是模拟输入账号密码自动登录,不涉及到相关的加解密,主要是围绕着数据包以及浏览器界面的元素定位分析
在自动登录完成后进入”阅读“章节,进行模拟性质的挂机刷阅读分(后续写一篇新的贴子介绍)

正文
模拟登录分析

登录地址:学习通登陆地址

在登录地址页面的话,直接分析【账号】【密码】【登录】按钮
接下来打开浏览器的F12
先定位到【账号】

分析后可以发现元素内容如下

[HTML] 纯文本查看 复制代码
<input type="text" class="ipt-tel" placeholder="手机号/超星号" id="phone" maxlength="30">

其中账号里面有一个id="phone"后续会用得到,这里记录一下
定位到【密码】


分析后可以发现元素内容如下
[HTML] 纯文本查看 复制代码
<input type="password" class="ipt-pwd" placeholder="学习通密码" id="pwd" maxlength="20">

其中账号里面有一个id="pwd"后续会用得到,这里记录一下
定位到【登录】


分析后可以发现元素内容如下
[HTML] 纯文本查看 复制代码
<button type="button" class="btn-big-blue margin-btm24" id="loginBtn">登录</button>

其中账号里面有一个id="loginBtn"后续会用得到,这里记录一下
我们在获取到了必要的信息后,就可以直接模拟登录了,不需要考虑其他的
下面开始奉上代码

[Python] 纯文本查看 复制代码
from DrissionPage import WebPage,ChromiumOptions

# 创建配置对象
co = ChromiumOptions()
#匿名模式
co.incognito()
page = WebPage(chromium_options = co)
page.change_mode('d')

uname = str(input("请输入你的账号:"))
pwd = str(input("请输入你的密码:"))

#登录部分
login_url = "https://passport2.chaoxing.com/login?fid=&newversion=true&refer=https%3A%2F%2Fi.chaoxing.com"
page.get(login_url)
page.ele('#phone').input(uname)
page.ele('#pwd').input(pwd)
page.ele('#loginBtn').click()
page.listen.start("i.chaoxing.com/base")#自动监听地址为:i.chaoxing.com/base的数据包
#点击课程按钮
page.ele('@name=课程').click()


简单解释一下
[Python] 纯文本查看 复制代码
# 创建配置对象
co = ChromiumOptions()
#匿名模式
co.incognito()
page = WebPage(chromium_options = co)
page.change_mode('d')

这一串代码的话主要是创建了一个无痕迹访问的浏览器
这样子便于后面不断测试的过程中不会因为第一次已登录而保留cookies等信息,确保运行完成后清除掉登录缓存数据
具体配置相关信息可以在官网进行搜索,这里就不赘述了

下面这部分代码的话则是更好理解了
其中DrissionPage里面有个功能强大且简便的地方就在于查找元素方法ele()
它支持多种方式查找可以参考下图,我这里用了page.ele('#phone')此类方法就是通过id查找对应的位置
不只是通过id,他还能根据class,css,以及元素内包裹的文本元素进行查找,详情可以翻阅一下官网文档,后续也会用到部分功能


[Python] 纯文本查看 复制代码
uname = str(input("请输入你的账号:"))
pwd = str(input("请输入你的密码:"))

#登录部分
login_url = "https://passport2.chaoxing.com/login?fid=&newversion=true&refer=https%3A%2F%2Fi.chaoxing.com"
page.get(login_url)
page.ele('#phone').input(uname)
page.ele('#pwd').input(pwd)
page.ele('#loginBtn').click()
page.listen.start("i.chaoxing.com/base")#自动监听地址为:i.chaoxing.com/base的数据包
#点击课程按钮
page.ele('@name=课程').click()

上面的程序还有一段page.listen.start("i.chaoxing.com/base")这个,就如注释的意思一样
他会自动监听数据包对应的地址,而这个地址的话,则是后面我们提取数据包里面的UID所需要用到的

提取课程
承接上面最后一行代码,登陆完成后点击了课程按钮,进入到了课程页面
检查元素可以看到,课程界面id为courseList,这样的话,我们可以通过ele进行id定位,再利用children()方法将该元素下的内容全部提取出来传递给courseList


UID方面,则是利用前面设置的数据包监听,通过page.listen.wait方法进行获取数据包,由于该数据包存在于cookies内,我就通过res.request.cookies的方式进行提取


[Python] 纯文本查看 复制代码
#提取课程
courseList = page.ele('#courseList').children()

#获取UID
res = page.listen.wait(timeout = 10)
cookie_s = res.request.cookies
for i in cookie_s:
    if i['name'] == "UID":
        uid = i['value']

#获取必要的后续可能用得到的参数
courseids = []
clazzids = []
personids = []
c_ids = []
c_names = []
for i in courseList:
    courseids.append(i.attrs["courseid"])
    clazzids.append(i.attrs["clazzid"])
    personids.append(i.attrs["personid"])
    c_ids.append("course_" + i.attrs["courseid"] + "_" + i.attrs["clazzid"])

    t = i.ele("tag:span@class=course-name overHidden2")
    c_names.append(t.attrs['title'])

print("**********获取到如下课程**********")
for i in c_names:
    print(f"第{x+1}个课程:{i}")
    x = x + 1

choose = int(input("请选择你要刷第几个课程:"))

可能会有疑惑i.attrs方法,这其实是直接提取了元素里面的属性值,毕竟加载完后,属性值都在元素里面了,这一点我觉得就是这个包好用的地方(主要是用多少其他包,也可能能有更好的包)

至此我们其实就已经提取完成了所有的课程至不同的变量里面,以及已经获取了必要的参数了
从登录到获取参数,没有涉及到加解密问题,只对网页页面以及数据包进行了简单的分析



奉上完整的部分源代码
[Python] 纯文本查看 复制代码
from DrissionPage import WebPage,ChromiumOptions


# 创建配置对象(默认从 ini 文件中读取配置)
uid = ""
co = ChromiumOptions()
#匿名模式
co.incognito()
page = WebPage(chromium_options = co)
page.change_mode('d')

uname = str(input("请输入你的账号:"))
pwd = str(input("请输入你的密码:"))

#登录部分
login_url = "https://passport2.chaoxing.com/login?fid=&newversion=true&refer=https%3A%2F%2Fi.chaoxing.com"
page.get(login_url)
page.ele('#phone').input(uname)
page.ele('#pwd').input(pwd)
page.ele('#loginBtn').click()
page.listen.start("i.chaoxing.com/base")
#点击课程按钮
page.ele('@name=课程').click()

#提取课程
courseList = page.ele('#courseList').children()

#获取UID
res = page.listen.wait(timeout = 10)
cookie_s = res.request.cookies
for i in cookie_s:
    if i['name'] == "UID":
        uid = i['value']

#获取必要的后续可能用得到的参数
courseids = []
clazzids = []
personids = []
c_ids = []
c_names = []
for i in courseList:
    courseids.append(i.attrs["courseid"])
    clazzids.append(i.attrs["clazzid"])
    personids.append(i.attrs["personid"])
    c_ids.append("course_" + i.attrs["courseid"] + "_" + i.attrs["clazzid"])

    t = i.ele("tag:span@class=course-name overHidden2")
    c_names.append(t.attrs['title'])

print("**********获取到如下课程**********")
for i in c_names:
    print(f"第{x+1}个课程:{i}")
    x = x + 1

choose = int(input("请选择你要刷第几个课程:"))

免费评分

参与人数 5吾爱币 +11 热心值 +3 收起 理由
Kaipoluo + 1 用心讨论,共获提升!
junjia215 + 1 + 1 用心讨论,共获提升!
cfx0619 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Ruomeng + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
Scan 发表于 2024-6-21 20:21
有点落后了,我掌握最新的技术是青龙面板自动开刷
3#
xixicoco 发表于 2024-6-21 23:11
这个有点意思哈,不分析协议了,都是模拟点击
4#
 楼主| Lengxiy 发表于 2024-6-22 17:03 |楼主
本帖最后由 Lengxiy 于 2024-6-22 17:06 编辑
Scan 发表于 2024-6-21 20:21
有点落后了,我掌握最新的技术是青龙面板自动开刷

给信息略微闭塞的人,以及准备读大学的看看
5#
Scan 发表于 2024-6-22 18:32
Lengxiy 发表于 2024-6-22 17:03
给信息略微闭塞的人,以及准备读大学的看看

用redis存储账户数据、模拟点击跟你差不多
6#
GVOPwZWhL2IFcIZ 发表于 2024-6-25 20:32
学习了。谢谢楼主
7#
EUV996 发表于 2024-6-27 22:04
好像懂了,又好像没懂
8#
 楼主| Lengxiy 发表于 2024-6-28 08:45 |楼主
EUV996 发表于 2024-6-27 22:04
好像懂了,又好像没懂

try一下就知道了,可以跟着教程步骤来,如果不懂的话可以在这里ask一下
9#
tt9087 发表于 2024-7-9 10:36
虽然有新技术了,但还是可以学习学习的
10#
xiyuanla 发表于 2024-7-9 14:48
Scan 发表于 2024-6-21 20:21
有点落后了,我掌握最新的技术是青龙面板自动开刷

可以合作吗 我这边有大量学习通订单
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表