Files
awesome-python-login-model/v2ex/v2ex.py
T
2019-03-06 18:23:58 +08:00

71 lines
1.9 KiB
Python

#!/usr/bin/env python3
# coding: utf-8
# v2ex.py
'''
Required
- requests
- lxml
'''
import requests
from io import StringIO
from lxml import etree
class V2EX:
login_url = 'https://www.v2ex.com/signin'
def __init__(self, user_name, password):
self.user_name = user_name
self.password = password
session = requests.Session()
session.headers = {
'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50"
}
self.session = session
def get_login_parameters(self):
response = self.session.get(self.login_url)
parser = etree.HTMLParser()
tree = etree.parse(StringIO(response.text), parser)
elements = tree.xpath('//form[@method="post" and @action="/signin"]/table[@cellpadding="5" and @cellspacing="0" and @border="0" and @width="100%"]//tr[position()<last()]/td[2]/input')
user_name_key = elements[0].xpath('@name')[0]
password_key = elements[1].xpath('@name')[0]
once = elements[2].xpath('@value')[0]
return user_name_key, password_key, once
def login(self, user_name_key, password_key, once):
# 必须带上 referer
self.session.headers.update({'referer': self.login_url})
d = {
user_name_key: self.user_name,
password_key: self.password,
'once': once,
'next': '/'
}
response = self.session.post(self.login_url, d)
flag = False
if "条未读提醒" in response.text:
flag = True
return flag
def test_login(self):
user_name_key, password_key, once = self.get_login_parameters()
return self.login(user_name_key, password_key, once)
if __name__ == '__main__':
v2ex = V2EX("user_name", "password")
print("login\t%r" % v2ex.test_login())