import requests
from lxml import etree
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
# 登录页的url
login_page = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
# 登录需要提交的内容: 用户名、密码、静态表单、两个token、验证码
# 经过分析,两个token和验证码是在访问登录页的时候后动态生成
# login_html = requests.get(login_page)
# 访问登录页面的时候也要用Session,因为token值保存在后台,Session可以记录后台的token值
s = requests.session()
login_html = s.get(login_page)
# 获取两个token值
login_tree = etree.HTML(login_html.text)
a = login_tree.xpath("//input[@id='__VIEWSTATE']/@value")[0]
b = login_tree.xpath("//input[@id='__VIEWSTATEGENERATOR']/@value")[0]
# print(a,b)
# 获取验证码
code_url = 'https://so.gushiwen.org'+login_tree.xpath("//img[@id='imgCode']/@src")[0]
# 下载验证码
# 动态生成的验证码也需要用Session请求
code_info = s.get(code_url)
# print(code_info.content)
with open('code.png', 'wb') as fp:
fp.write(code_info.content)
# 验证码可以有以下几种处理机制,用第三方的AI平台接口来识别、自己训练一个AI、人工识别
code = input('请输入你看到的验证码:')
# 登录信息提交的url
login_url = 'https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
# 请求体
data = {
'__VIEWSTATE': '4ycB5xq0byEmR55uPGXID325gZgUsrgVWV/c/28MBPQQ/4Szc7M0PVHwBnCWRg9r65UuqmDbD/SjF0TNIbeIsMg5cUjuNAK1qung70hb3kaQKQ2ziTgi+7CwbGw=',
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from': 'http://so.gushiwen.org/user/collect.aspx',
'email': 'fanjianbo666@163.com',
'pwd': '12345678',
'code': code,
'denglu': '登录'
}
r = s.post(url=login_url, data=data, headers=headers)
print(r.text)
网友评论