登录古诗文网:验证码、隐藏域

登录地址:https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx

难点1:隐藏域

登录表单参数有两个随机的(__VIEWSTATE、__VIEWSTATEGENERATOR),每次登录这两个参数是随机的,需要从每次访问的链接中解析这两个随机数。

难点2:验证码

解析源码发现,验证码是一个链接,访问该链接可以得到验证码。但是不能直接访问,每次访问该验证码都会生成一个新的验证码。需要使用requests的session方法获取session对象,使用该session对象获取二进制二维码数据,以及调用登录接口。

完整代码

"""
_*_ : utf-8 _*_ 
@Time: 2023/11/18 21:07
@Author: LWK
@File: 083_requests
@Project: demo01
"""
import requests
from bs4 import BeautifulSoup

# 1、隐藏域
# 2、验证码

# 登录界面URL
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76'
}

res = requests.get(url=url, headers=headers)
context = res.text

# 解析网页源码,获取 __VIEWSTATE __VIEWSTATEGENERATOR
soup = BeautifulSoup(context, 'lxml')
__VIEWSTATE = soup.select('#__VIEWSTATE')[0].attrs.get('value')
__VIEWSTATEGENERATOR = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

# 获取验证码图片
code = 'https://so.gushiwen.cn' + soup.select('#imgCode')[0].attrs.get('src')

# 有坑,相当于再次访问验证码地址,验证码会变化
# import urllib.request
# urllib.request.urlretrieve(url=code, filename='../temp/code.jpg')

session = requests.session()
# 获取验证码内容
code_content = session.get(code).content
# 二进制保存图片
with open('../temp/code.jpg', 'wb') as fp:
    fp.write(code_content)

code_inp = input('请输入验证码')

login_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

data_post = {
    '__VIEWSTATE': __VIEWSTATE,
    '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '178440531@qq.com',
    'pwd': 'Aa1111',
    'code': code_inp,
    'denglu': '登录'
}

res_login = session.post(url=login_url, data=data_post, headers=headers)
content_post = res_login.text

with open('../temp/gushiwen.html', 'w', encoding='utf-8') as fp:
    fp.write(content_post)

posted @ 2023-11-20 22:37  IMKKA  阅读(85)  评论(0)    收藏  举报