利用Python实现MOOC扫码登录

news/2024/7/19 8:35:47 标签: python, 爬虫

利用Python实现MOOC扫码登录

1、基本原理

  • 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY
  • 浏览器开启定时轮询服务器,确认KEY对应的扫码结果
  • 用户使用app扫码二维码,app获取KEY并告知服务器已扫码
  • App确认登陆(包含个性化校验过程),服务器更新KEY的校验结果
  • 浏览器轮询结果成功,获得一次性token
  • 带上token请求资源,获得有效cookie,正常访问资源。

2、代码实现

我们以MOOC为例

1、访问网站扫码登录页,并下载二维码

请添加图片描述

python">session = requests.session()
url = 'https://www.icourse163.org/logonByQRCode/code.do?width=182&height=182'   # 扫码登录url
header = {
    'referer': 'https://www.icourse163.org/',
    'user-agent': ua
}
resp = session.get(url,headers = header).json()		# 拿到相应的json数据
codeUrl = resp['result']['codeUrl']				# 提取二维码url及唯一标志key
pollKey = resp['result']['pollKey']
codejpg = session.get(codeUrl)				# 请求二维码
with open('text.jpg','wb') as f:			# 下载二维码
    f.write(codejpg.content)

2、模拟轮询

请添加图片描述

利用已得的唯一标志key对服务器发起定时轮询,获得相应数据

通过分析,codeStatus的值为0是表示,等待扫码;codeStatus的值为1是表示,已扫码,等待确认登录;codeStatus的值为2是表示,扫码成功,此时服务器会返回token,这个对我们很有用

python">checkUrl = f'https://www.icourse163.org/logonByQRCode/poll.do?pollKey={pollKey}'
os.system('start text.jpg')
token = None
for i in range(20):				# 模拟轮询
    checkResp = session.get(checkUrl,headers = header).json()
    if checkResp['result']['codeStatus'] == 2:
        token = checkResp['result']['token']		# 提取token
    else:
        time.sleep(1)			# 每秒一次

3、弹出二维码,扫码登录

python">os.system('start text.jpg')

4、带上token请求资源,获得有效cookie,正常访问资源。

python">vaildateUrl = f'https://www.icourse163.org/passport/logingate/mocMobChangeCookie.htm?token={token}&returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt'	# returnUrl指MOOC网
session.get(vaildateUrl,headers = header)

http://www.niftyadmin.cn/n/1865472.html

相关文章

计算机软件的四种人才

现代社会分工愈来愈细,计算机软件业亦如此。在我看来,计算机软件大致可以分为以下四类人才: 1、技术类:这类人才非常基础,但地位非常重要。他们对系统、编程工具非常熟悉,且具有很强的程序设计能力。通常这…

集群并行文件系统Lustre部署

href"./Lustre_deployment.files/filelist.xml" rel"File-List" />集群并行文件系统Lustre部署刘爱贵 Aigui.LIUihep.ac.cn 2006-10-11 一、 引言 Lustre是一个开源的、基于对象存储技术的集群并行文件系统,它具有很高的可扩展性…

计算机三大理论基石

“如果从事计算机的人都站在一座坟墓前,那么这座坟墓就是图灵机;如果有勇气掘开坟墓,那么有口棺材,就是递归论;里面还有一具骷髅,则是能行性”。这是计算机体系结构课上老师说的,可惜自己计算机…

读我(Readme)

关于我:刘爱贵(Aiguille Liu),更多信息http://goc.ac.cn/liuag/readme.html Google Page: http://aigui.liu.googlepages.com Homepage: http://www.goc.ac.cn/liuag SOHU Blog: http://www.liuag.cn MSN: liuaghotmail.co…

如何提高自己的创造力?

创新(Innovation)、技术创新(Technology Innovation),已经成了人们耳熟能详的词汇,进入了每个普通人的生活。我在网络上查阅了一下,创新大致可以定义如下:(1)…

数据聚类概述

[引言]我调研数据聚类的目的是想基于聚类对文件访问模式进行预测。许多系统把数据访问请求当作是独立的事件。实际上,数据请求并非完全随机,而是由用户或程序的行为驱动的,存在特定的访问模式。同类用户或多或少具有相同的访问模式&#xff0…

文件访问预测

注:“文件访问预测”是我论文的研究工作中的一部分。处理器与I/O存在速度鸿沟、网络带宽的限制(特别是无线移动网络)、网络应用的断连操作(如移动计算、AFS)等原因,造成了数据访问的延迟,IO和网…

数值交换算法

三种方法&#xff1a;(1)使用临时变量 (2)不使用中间变量&#xff0c;仅使用加法运算 (3)不使用中间变量&#xff0c;使用异或XOR操作 #include <iostream.h> template <typename T>void swap_var(T &a, T &b){ T tmp; tmp a; a b; b tmp;} temp…