python 通过title判断_利用Python模拟GitHub登录
点击关注,我们共同每天进步一点点!
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析。现在我准备尝试着结合Python来模拟GitHub登录。
Fiddler抓包分析
首先,我们想要模拟一个网站的登录,我们必须要简单了解其大致过程。
在这里,我通过Fiddler来抓取GitHub登录的请求,从网页上登录的URL为:https://github.com/login ,抓包结果如下:
左边的是会话列表,右边的是请求和响应的数据。一般情况下,登录都是用POST请求,因为我在左边的会话列表中设置了显示RequestMethod一列,因此能够很方便的找到POST请求。当然,Fiddler默认不显示RequestMethod,如果没有设置,还可以通过命令“=post”来快速过滤POST请求。
在GitHub登录时,我们通过抓包发现,GitHub登录的URL虽然时https://github.com/login,但发生了302重定向,其真正提交POST表单数据的URL是 https://github.com/session ,当登录成功时,则会跳转到 https://github.com/ 首页。
打开WebForm,我们可以看到POST表单数据提交的值,可以发现,只有authenticity_token、login、password三个字段是会变化的,其余的每次登录都是固定的值。而login、password分别是我们登录的用户和密码,因此我们只需要分析出 authenticity_token 从何而来,便可以实现模拟登录了。
至于如何确定 authenticity_token 从哪个页面返回的,我们直接在响应数据中搜索就行了,或者把数据复制出来再进行搜索。最后我们会发现,authenticity_token 是在 https://github.com/login 这个请求中返回的,只不过用 hidden 隐藏起来了。
好了,到目前大致流程我们已经梳理清楚了,接下来我们便通过Python来实现模拟GitHub登录。
代码实现
本人环境:PyCharm 2018.2.4、Python3.7.0
设置请求头和Session
# 设置Sessionself.s = requests.session()# 设置请求头self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0"}# 在使用Fiddler时进行请求,通过该代码忽略SSLError错误self.s.verify = False
在这里,我们设置了Session会话对象,Session相当于1个微型浏览器,能够自动帮我们保持请求中的某些参数(如cookies),有了它,我们一般不需要额外去处理cookies、header等。
假如我们是在Fiddler打开的状态下,通过代码进行请求,那么将会遇到SSLError的错误,而当加上 self.s.verify = False 这行代码后,我们便可以忽略该错误。
requests.exceptions.SSLError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /login (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)')))
注意:
我们通过上面的代码忽略了SSLError的错误后,再次运行,这时仍然会出现2行警告,这2个警告并不影响我们的登录,可以不管它。
D:\Python\installation\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)D:\Python\installation\lib\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)
如果我们想去掉这2行警告,也可以通过如下代码来解决(针对Python3):
import urllib3urllib3.disable_warnings()
2.获取authenticity_token
login_url = "https://github.com/login"r = self.s.get(login_url, headers = self.headers)authenticity_token = re.findall('"hidden" name="authenticity_token" value="(.+?)" />', r.text)print("authenticity_token:{}".format(authenticity_token))return authenticity_token[1]
当我们访问 https://github.com/login 时,登录界面会生成隐藏参数authenticity_token,而这恰是我们在登录提交表单时需要用到的参数。我们可通过正则表达式 re.findall 来获取authenticity_token。另外,我们还会发现,HTML界面中存在2个authenticity_token,因此通过正则返回的是一个长度为2的列表,经过分析,GitHub在登录时用到的是列表中的第二个元素,即authenticity_token[1]。
模拟登录
def github_login(self, authenticity_token, username, password): session_url = "https://github.com/session" body = { "authenticity_token":authenticity_token, "commit":"Sign in", "login":username, "password":password, "utf8":"✓", "webauthn-support":"unknown" } r = self.s.post(session_url, headers = self.headers, data = body) title = re.findall('(.+?)',r.text) print("title:%s" %title[0]) return title[0]
我们在上面得到authenticity_token后,便可以来实现登录了。通过POST请求提交表单后,我们需要判断是否登录成功。在这里,我是通过页面的标题来判断GitHub是否登录成功,当然,还有许多方法可以用于判断。
通过 title 判断是否登录成功
def is_login_success(self, title): if "GitHub" == title: return True else: return False
GitHub登录成功后,界面的标题会显示"GitHub",而登录失败时,一般显示的标题则是"Sign in to GitHub · GitHub"。
OK,以上就是通过Python模拟GitHub登录的过程,难度不大,相信大多数人阅读后都应该可以进行实践。
附源码:
import requestsimport reimport urllib3urllib3.disable_warnings()
class Github_Login():
def __init__(self): # 设置Session self.s = requests.session() # 设置请求头 self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0" } # 在使用Fiddler时进行请求,通过该代码忽略SSLError错误 self.s.verify = False
# 获取 authenticity_token def get_authenticity_token(self): login_url = "https://github.com/login" r = self.s.get(login_url, headers = self.headers) authenticity_token = re.findall('', r.text) print("authenticity_token:{}".format(authenticity_token)) return authenticity_token[1]
# 模拟登录,并返回 title def github_login(self, authenticity_token, username, password): session_url = "https://github.com/session" body = { "authenticity_token":authenticity_token, "commit":"Sign in", "login":username, "password":password, "utf8":"✓", "webauthn-support":"unknown" } r = self.s.post(session_url, headers = self.headers, data = body) title = re.findall('(.+?)',r.text) print("title:%s" %title[0]) return title[0]
# 通过 title 判断是否登录成功 def is_login_success(self, title): if "GitHub" == title: return True else: return False
if __name__ == '__main__': github = Github_Login() authenticity_token = github.get_authenticity_token() title = github.github_login(authenticity_token, username = "用户名", password = "密码") login_result = github.is_login_success(title) print(login_result)
原文地址:https://www.cnblogs.com/wintest/p/11183744.html
喜欢请关注,有用请转发~
升职、加薪、无漏测-点“在看”
python 通过title判断_利用Python模拟GitHub登录相关推荐
- python post请求 上传图片_利用python模拟实现POST请求提交图片的方法
本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传 ...
- python逐步回归筛选变量_利用python实现逐步回归
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...
- python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...
相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...
- 基于python的系统构建_利用python构建一个简单的推荐系统
摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...
- python朋友圈评论_利用Python实现朋友圈中的九宫格图片效果
前言 大家应该经常在朋友圈看到有人发九宫格图片,其实质就是将一张图片切成九份,然后在微信中一起发这九张图即可. 说到切图,Python 就可以实现,主要用到的 Python 库为 Pillow,安装使 ...
- python ks值计算_利用Python计算KS的实例详解
在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...
- python实现邮件客户端_利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...
- python制作图片墙_利用python生成照片墙的示例代码
PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...
- 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)
原博文 2016-06-17 23:21 − 以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频 ...
最新文章
- ubuntu16.06+vsftpd+nginx搭建图片服务器
- 小冰和她的兄弟姐妹们组团出道:唱歌跳舞写文章样样都会,而且都开放版权...
- game,match,competition,contest区别
- nlp mrc的损失是什么_田渊栋从数学上证明ICLR最佳论文“彩票假设”,强化学习和NLP也适用...
- Spring注解之@Import用法解析
- Linux学习总结(70)——Bash 脚本中常用的内置变量汇总
- bzoj 4451 : [Cerc2015]Frightful Formula FFT
- shell解析xml文件
- Java jar 如何防止被反编译
- 打开方式怎么用计算机程序,设置电脑默认软件打开方式的方法
- 小幅震荡市场下的期权投资策略举例
- php 转义反绡线,PHP汉字转拼音
- Linux中的ps指令详解
- 腾讯Redis压轴笔记,成功入职阿里
- Cox 比例风险模型中HR和置信区间
- XJOI 循环-分解质因式
- cad2016中选择全图字体怎么操作_CAD2016 软件安装教程
- 如何快速开通流量主要求微信小程序如何快速开通流量主
- cisco 3560x snmp 详细说明
- LinkOS——打造物联网的一站式服务平台