from lxml import etree
import requests
# import pdb
class Login():
"""
登录类,为实例提供了初始化状态和方法
"""
def __init__(self):
"""
初始化请求头,跳转url信息,会话
"""
self.headers = {
'Referer': 'https://github.com/',
'Host': 'github.com',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/68.0.3440.75 Chrome/68.0.3440.75 Safari/537.36'
}
self.login_url = 'https://github.com/login'
self.post_url = 'https://github.com/session'
self.logined_url = 'https://github.com/settings/profile'
self.session = requests.Session()
def token(self):
"""
获取authticity_token信息(一个隐藏的input),为伪造表单登录提供信息
"""
response = self.session.get(self.login_url, headers=self.headers)
selector = etree.HTML(response.text)
token = selector.xpath('//form/input[2]/@value')[0]
return token
def login(self, email, password):
"""
伪造表单登录
"""
post_data = {
'commit': 'Sign in',
'utf8': '✓',
'authenticity_token':self.token(),
'login': email,
'password': password
}
response = self.session.post(self.post_url, data=post_data,headers=self.headers)
response = self.session.get(self.logined_url,headers=self.headers)
if response.status_code == 200:
self.profile(response.text)
def profile(self, html):
"""
到个人信息页,获取个人信息
"""
selector = etree.HTML(html)
name = selector.xpath('//input[@id="user_profile_name"]/@value')[0]
email = selector.xpath('//select[@id="user_profile_email"]/option[@value!=""]/text()')
print(name, email)
if __name__ == '__main__':
# pdb.set_trace()
login = Login()
login.login(email='email', password='password')
通过requests库伪造表单模拟登录github
猜你喜欢
转载自blog.csdn.net/qq_32392853/article/details/81631920
今日推荐
周排行