这次我们要模拟登录的页面是

https://github.com/login

首先我们先尝试着登陆一遍分析一下请求,

打开开发者工具下的network选项,

可以很清楚的看到这个会话session,而且是post请求,这多半是我们刚才登录是所发出去的请求,我们往下拉查看form data

这里要注意,这个authenticity_token的值该怎么获取,我们从网页的源代码中查找这个关键字,

发现这个值就在页面中,而且每次刷新之后这个value总是会不断地变化,好,分析完毕后,我们开始构建代码

 import requests
from bs4 import BeautifulSoup
import time
#自己写的,模块化一哈,舒服一哈,2019.5.6 22.22
#模拟登陆练习,登录github
class login(object):
def __init__(self):
self.headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}
self.first_url='https://github.com/login'
self.second_url='https://github.com/session'
self.test_url='https://github.com/?tab=stars' #可以设置成你的个人主页url
self.session=requests.Session()
def get_log(self):#这个方法是把token信息解析找到后传递
html=requests.get(url=self.first_url,headers=self.headers)
soup=BeautifulSoup(html.text,'lxml')
tokens=soup.find_all('input',type="hidden")[1]
at=tokens.attrs['value']
return at
def post_log(self,login,password):
       #这是要提交的表单
data={
'commit':'Sign in',
'utf8':' ✓',
'authenticity_token':self.get_log(),
'login':login,
'password':password,
'webauthn-support':' supported'
}
res=self.session.post(url=self.second_url,data=data,headers=self.headers)
self.test_func()
def test_func(self): #这个方法用来模拟登陆后请求我们的个人主页,然后把源码保存到文件里,以此来确定是否模拟登录成功。
res2=self.session.get(url=self.test_url,headers=self.headers)
with open('gitstar.html','wb') as f:
f.write(res2.content)
if __name__=='__main__':
jessus=login()
jessus.post_log('你的用户名','你的密码')

运行一下,我们把保存的html文件打开

成功了,确实是我们的github主页!

希望能给你提供思路,主要是requests post 请求,还有维持一个会话session很重要,如果你觉得文章还不错,点个赞吧,谢谢!

最新文章

  1. ABP文档 - Javascript Api - AJAX
  2. 在真机调试 iOS 应用:理解 Certificates, Identifiers & Profiles
  3. configure Git to accept a particular self-signed server certificate for a particular https remote
  4. linux入门级常用命令
  5. 动手学习TCP:总结和索引
  6. UVA1395 Slim Span(枚举最小生成树)
  7. Hadoop:搭建hadoop集群
  8. codeforces298c
  9. 常见的http头信息
  10. 编写你的第一个 Django 程序 第2部分
  11. hibernate之参数绑定
  12. 系统的了解DJANGO中数据MODULES的相关性引用
  13. java中protect属性用法总结
  14. 所闻所获6:meditashayne项目总结
  15. HTML+CSS笔记 CSS笔记集合
  16. [LeetCode]题解(python):014-Longest Common Prefix
  17. 在tomcat7中启用HTTPS的详细配置
  18. 使用trim_galore软件遇到的问题
  19. linux系统增加开机启动服务/应用
  20. Mybatis中文查询没有结果

热门文章

  1. 【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis
  2. 解决jQuery uploadify在非IE核心浏览器下无法上传
  3. poj 3683(2-sat+拓扑排序)
  4. RDA CoreDump 实例
  5. bzoj4264
  6. C++中正确使用PRId64 (转载)
  7. [读书笔记2]《C语言嵌入式系统编程修炼》
  8. JavaScript01天学习笔记分享
  9. Scala-基础-流程控制语句
  10. Linux 报错 ifconfig command not found