人人网改版,云打码也用不了了,所以用古诗文网+超级鹰模拟登录练习,放源码,供一起学习的小伙伴参考:
import requests
from lxml import etree
from chaojiying_Python.chaojiying import Chaojiying_Client
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42'
}
def get_session():
session = requests.Session()
return session
# 模拟登录古诗文网,将验证码下载下来
def get_img(session):
# 不需要通过页面解析得到验证码图片地址,直接复制验证码图片链接即可
url = 'https://so.gushiwen.cn/RandCode.ashx'
response = session.get(url,headers=headers)
img_path = './chaojiying_Python/a.jpg'
with open(img_path,'wb') as fp:
fp.write(response.content)
def get_VIEWSTATE(sesiion):
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
page_text = sesiion.get(url, headers=headers).text
tree = etree.HTML(page_text)
viewstate = tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
return viewstate
# 调用打码工具
def getCode():
chaojiying = Chaojiying_Client('账号', '密码', '软件id')
im = open('./chaojiying_Python/a.jpg', 'rb').read()
result = chaojiying.PostPic(im, 1902) # 验证码类型
return result['pic_str']
# 模拟登录
def login(viewstate,code):
login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
data = {
'__VIEWSTATE': viewstate,
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from': 'http://so.gushiwen.cn/user/collect.aspx',
'email': '',
'pwd': '',
'code': code,
'denglu': '登录'
}
response = session.post(login_url,headers=headers,data=data)
response.encoding = 'utf-8'
response.encoding = response.apparent_encoding
login_page_text = response.text
with open('./古诗文.html', 'w', encoding='utf-8') as fp:
fp.write(login_page_text)
if __name__ == '__main__':
session = get_session()
get_img(session)
viewstate = get_VIEWSTATE(session)
code = getCode()
login(viewstate,code)