2301_79438322 2024-06-02 20:52 采纳率: 80%
浏览 5

输入验证码后显示错误,如何解决?


import requests

url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

# __VIEWSTATE: uM9grpiBSD3Q114jDI+CaG+nXuQ7qAbawhd0nPQ5pfb9tC1FTEsp4PuKrc4ZHMKgPVGsWdkzSe4ipKPS7o3urFD8KAFjvtoP1N1b7Tj23vuIUrtLcDx5cat3fyZbA+tslYEaIJySr4S0JimvjObL2qDJaio=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: https://www.gushiwen.cn/
# email: 15939014979  已知
# pwd: liuyihao123123 已知
# code: 07Fk       未知
# denglu: 登录

# 未知的:  __VIEWSTATE   __VIEWSTATEGENERATOR   前边这俩去源码里找  code

response = requests.get(url=url, headers=headers)
content = response.text

from lxml import etree

tree = etree.HTML(content)

# 获取VIEWSTATE
viewstate = tree.xpath('//div/input/@value')[0]
# print(viewstate)

viewstategenerator = tree.xpath('//div/input/@value')[1]
# print(viewstategenerator)
code = tree.xpath('//div/img/@src')[1]
# print(code)
code_url = "https://www.gushiwen.cn" + code
# print(code_url)

# 用这个的话在下面输入验证码时已经变了
# import urllib.request
# urllib.request.urlretrieve(url=code_url, filename='code.jpg')

# requests里边有一个方法session()通过session的返回值就能使请求变成一个对象
session = requests.session()
# 验证码的url的内容
response_code = session.get(code_url)
# 注意这里要用二进制数据,因为我们要的是图片下载
content_code = response_code.content
# wb的模式就是将二进制的数据写入文件
with open('code.jpg', 'wb') as fp:
    fp.write(content_code)

# 获取了验证码的图片之后 下载到本地  观察之后在控制台输入这个东西

code_name = input("请输入你的验证码")

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

data_post = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': viewstategenerator,
    'from': "https://www.gushiwen.cn/",
    'email': "15939014979",
    'pwd': "liuyihao123",
    'code': code_name,
    'denglu': '登录',
}

response_post = session.post(url=url, headers=headers, data=data_post)

content_post = response_post.text

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

输入验证码后显示错误,不清楚

  • 写回答

4条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据你提供的代码,问题出现在输入验证码后显示错误的情况。出现这种错误可能有以下几种原因:

    1. 验证码输入错误:首先需要确认你输入的验证码是正确的,可能是大小写字母或数字的输入错误导致验证失败。

    2. 验证码过期:验证码有时效性,如果你在请求验证码后的时间间隔过长,验证码可能已经过期失效。需要重新请求验证码并在有效时间内提交。

    解决这个问题的方法可以有以下几种:

    1. 确认验证码输入正确:仔细检查你输入的验证码是否与显示的验证码一致,确保没有输入错误。

    2. 及时请求并提交验证码:在请求验证码后应尽快进行验证,避免验证码过期。可以将验证码请求和提交的操作封装成函数,方便重复使用。

    3. 尝试多次请求验证码并提交:如果验证码错误的次数有限制,可以尝试多次请求验证码并进行提交。可以使用循环结构来重试,直到验证码验证成功或达到最大尝试次数。

    4. 如果以上方法仍然无法解决问题,可以考虑使用验证码识别技术,自动识别验证码并提交验证请求。

    修改后的代码示例:

    import requests
    from lxml import etree
    
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
    }
    
    # 创建会话对象
    session = requests.session()
    
    # 发送请求获取验证码
    response = session.get(url, headers=headers)
    content = response.text
    tree = etree.HTML(content)
    viewstate = tree.xpath('//div/input/@value')[0]
    viewstategenerator = tree.xpath('//div/input/@value')[1]
    code = tree.xpath('//div/img/@src')[1]
    code_url = "https://www.gushiwen.cn" + code
    
    # 下载验证码图片
    response_code = session.get(code_url)
    content_code = response_code.content
    with open('code.jpg', 'wb') as fp:
        fp.write(content_code)
    
    # 循环尝试输入验证码
    max_attempts = 5
    for attempt in range(max_attempts):
        code_name = input("请输入验证码:")
        data_post = {
            '__VIEWSTATE': viewstate,
            '__VIEWSTATEGENERATOR': viewstategenerator,
            'from': "https://www.gushiwen.cn/",
            'email': "15939014979",
            'pwd': "liuyihao123",
            'code': code_name,
            'denglu': '登录',
        }
        response_post = session.post(url, headers=headers, data=data_post)
        content_post = response_post.text
        
        if "验证码输入错误" in content_post:
            print("验证码输入错误,请重新输入。")
            continue
        else:
            print("登录成功!")
            break
    else:
        print("尝试次数超过最大限制。")
    

    请根据你的实际情况修改代码中的参数进行测试。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月2日

悬赏问题

  • ¥50 如何给网页加一个必须阅读几秒后才可以点击确定的公告弹窗
  • ¥15 人脐静脉内皮细胞(HEUVC)重悬后自动聚团,怎么解决?
  • ¥30 faiss 的 IndexFlatL2 相似性搜索
  • ¥20 找人开发一套大数据算法系统!
  • ¥15 pycharm中cv2安装后可以用但是无法补全或跳转函数,搜索后使用以下方法无效1.重新安装包(更换版本也不行,如何解决?
  • ¥15 如何关闭Win11文件资源管理器的搜索栏的预选词
  • ¥15 odoo17非生产订单产品出库整个业务流程处理
  • ¥20 寻大数据算法的技术!
  • ¥15 悬赏 关于#c++#的问题
  • ¥15 python 处理文本报错问题