python 模拟登陆leetcode
2016-03-25 20:41
507 查看
模拟登陆,首先要知道提交页面的网址,和每次post的内容,采用chrome的浏览器的开发者工具,查看。得到下图
可以看到提交的内容包括”csrfmiddlewaretoken”、”login”、”password”,后两个是用户名和密码,第一个应该是一中验证机制,每次打开页面都会随机生成一个,果不其然,在网页的代码中找到
这样,我们只要每次把登陆界面的csrf值扣出来,然后放到和用户名,密码放到一个字典中,就可以了。这里取csrf值的方式使用了beautifulsoup这个库,先得到一个beautifulSoup对象,参数是网页的源码,和使用的解析模式
beautifulsoup的使用非常简单,我们通过上面可以看到csrf值是在一个input tag中,可以直接用下面的代码获得。
接下来是
这是你会发现所打印出来的res.status_code是403,也就是网页禁止访问的含义。为什么会出现这种情况呢?谷歌了一下,发现leetcode登录时post的csrf并不是像知乎时藏在网页源码中的,而是在你get时返回值中
全部代码如下
可以看到提交的内容包括”csrfmiddlewaretoken”、”login”、”password”,后两个是用户名和密码,第一个应该是一中验证机制,每次打开页面都会随机生成一个,果不其然,在网页的代码中找到
这样,我们只要每次把登陆界面的csrf值扣出来,然后放到和用户名,密码放到一个字典中,就可以了。这里取csrf值的方式使用了beautifulsoup这个库,先得到一个beautifulSoup对象,参数是网页的源码,和使用的解析模式
url = "https://leetcode.com/accounts/login/" content = gethtml(url) soup = BeautifulSoup(content,"html.parser")
beautifulsoup的使用非常简单,我们通过上面可以看到csrf值是在一个input tag中,可以直接用下面的代码获得。
def getxsrf(): input_tag = soup.input return input_tag["value"]
接下来是
def login(): _xsrf = getxsrf() print "the xsrf is ",_xsrf login_data['csrfmiddlewaretoken']=_xsrf login_data['login'] = "your name" login_data['password'] = "your pwd" res = s.post(url,headers = headers_base,data=login_data) print res.status_code print res.cookies return res.cookies
这是你会发现所打印出来的res.status_code是403,也就是网页禁止访问的含义。为什么会出现这种情况呢?谷歌了一下,发现leetcode登录时post的csrf并不是像知乎时藏在网页源码中的,而是在你get时返回值中
url = "https://leetcode.com/accounts/login/" res = s.get(url=url,headers=headers_base) print res.cookies['csrftoken'] login_data['csrfmiddlewaretoken']=res.cookies
全部代码如下
from bs4 import BeautifulSoup import requests s = requests.session() headers_base = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2', 'Connection': 'keep-alive', 'Host': 'leetcode.com', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36', 'Referer': 'https://leetcode.com/accounts/login/', } login_data={} def bs(html_doc): return BeautifulSoup(html_doc,"html.parser") def login(): url = "https://leetcode.com/accounts/login/" res = s.get(url=url,headers=headers_base) print res.cookies['csrftoken'] login_data['csrfmiddlewaretoken']=res.cookies['csrftoken'] login_data['login'] = "your name" login_data['password'] = "your pwd" res = s.post(url,headers = headers_base,data=login_data) print res.status_code return res.cookies def mainpage(): login() # res = s.get(url=url,headers=headers_base,cookies=login()) # print res.text # write2file("hist.html",res.text) mainpage()
相关文章推荐
- Python环境的安装
- Python碎片小知识点总结
- 自己实现一个Python调试器
- python之2048
- 两篇文章掌握Python语法和内置函数功能(第二篇)
- Python中对字典排序
- python 正则表达式的学习
- python操作Excel读写--使用xlrd
- python 冒号与逗号的区别
- Python学习笔记(三)高级特性
- python None与Null
- [python]python的包管理工具:pip和easy_install
- python学习(七):面向对象(二)
- python 中求和函数 sum详解
- Python-OpenCV(3)
- 我的Python成长之路---第七天---Python基础(22)---2016年2月27日(晴)
- 04python while循环语句
- 03python条件判断与缩进
- python基础学习笔记
- 学习笔记——Python」Python中的类(classes)