♛不见长安♛ 2025-09-13 02:47 采纳率: 28.6%
浏览 7

获取到验证码图片后无法打开





#通过登录 进入到主页
#通过找登录接口  发现需要参数很多

# __VIEWSTATE:/wEPDwUKLTU5OTg0MDIwNw8WAh4TVmFsaWRhdGVSZXF1ZXN0TW9kZQIBZGQGi0FCmPHMP+KelvQVsoBoqE2Axg==
# __VIEWSTATEGENERATOR:C93BE1AE
# from:http://www.gushiwen.cn/user/collect.aspx
# email:3514247757@qq.com
# pwd:123456
# code:wszu
# denglu:登录

#__VIEWSTATE   __VIEWSTATEGENERATOR    code是一个可以变换的量

# 难点:(1)__VIEWSTATE   __VIEWSTATEGENERATOR 一般情况下看不到的数据都是在页面的源码中
#      观察到这两个数据在页面的源码中 需要获取页面源码并解析
#     (2)验证码


import  requests

#登录页面的url地址
url = 'https://www.gushiwen.cn/user/login.aspx?from=http://www.gushiwen.cn/user/collect.aspx'

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

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


#解析页面源码  获取__VIEWSTATE   __VIEWSTATEGENERATOR
from bs4 import  BeautifulSoup
soup = BeautifulSoup(content,'lxml')

#获取__VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
#获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')


#获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code
#有坑
# import  urllib.request
# urllib.request.urlretrieve(url=code_url,filename='code.jpg')
#requests有一个方法 session()  通过session的返回值 就能使请求变成一个对象
session = requests.session()
#验证码url的内容
resp_code = session.get(code_url)
#注意此时要使用二进制数据 所以不能使用text
content_code = resp_code.content
#wb模式就是将二进制数据写入文件
with open('code.jpg','wb') as fp:
    fp.write(content_code)
    fp.close()

#获取验证码图片之后 下载到本地 观察验证码(或者使用图片识别)
code_name = input('请输入你的验证码:')


#登录
url_post = 'https://www.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fwww.gushiwen.cn%2fuser%2fcollect.aspx'

data_post = {
    '__VIEWSTATE':viewstate,
    '__VIEWSTATEGENERATOR':viewstategenerator,
    'from':'http://www.gushiwen.cn/user/collect.aspx',
   ' email':'595165358@qq.com',
    'pwd':'action',
   ' code':code_name,
    'denglu':'登录'
}


#session保证和上面访问为同一个防止二维码改变
resp_post = session.post(url=url_post,headers=headers,data=data_post)
content_post  = resp_post.text
with open('古诗文.html','w',encoding='utf-8') as f:
    f.write(content_post)

img

  • 写回答

6条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-09-13 08:48
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析:
      - 目前已知通过登录进入主页,且找到登录接口但参数众多。而核心问题是获取到验证码图片后无法打开,这可能涉及到多种情况,比如图片格式错误、获取图片的方式不正确、图片链接失效、缺少相应的解析图片的库或权限等。
    2. 解决方案:
      - 检查图片格式
      • 首先确认获取到的验证码图片的格式是否正确。常见的图片格式有JPEG、PNG等。如果格式不正确,可能无法正常打开。可以通过文件扩展名或者使用图片查看工具的文件信息查看功能来确认。
      • 检查获取图片的代码
      • 如果是通过HTTP请求获取图片,检查请求是否成功。例如在Python中使用requests库:
    import requests
    
    response = requests.get('验证码图片链接')
    if response.status_code == 200:
        with open('captcha.jpg', 'wb') as f:
            f.write(response.content)
    else:
        print('获取图片失败,状态码:', response.status_code)
    
     - 这里要确保`验证码图片链接`是正确的,并且注意请求的权限和可能的重定向等问题。
    
    • 检查图片链接
      • 确认验证码图片链接是否有效。有可能链接在获取后发生了变化或者本身就是错误的。可以在浏览器中直接访问该链接,看是否能正常显示图片。
    • 检查解析图片的环境
      • 如果是在特定的应用环境中无法打开图片,比如在某个软件或网站中,检查该环境是否缺少必要的图片解析库或插件。例如,某些浏览器可能需要安装特定的图片查看插件才能正常显示验证码图片。
        3. 多种解决方案的优缺点:
    • 检查图片格式
      • 优点:简单直接,能快速定位是否是图片格式问题导致无法打开。
      • 缺点:只能解决格式方面的问题,如果图片获取或链接等有问题,无法发现。
    • 检查获取图片的代码
      • 优点:全面检查了获取图片的过程,能发现请求是否成功等问题。
      • 缺点:需要有一定的代码编写和调试能力,对于不熟悉代码的人可能较困难。
    • 检查图片链接
      • 优点:直接验证链接有效性,操作相对简单。
      • 缺点:只能确定链接问题,不能解决其他可能导致图片无法打开的原因。
    • 检查解析图片的环境
      • 优点:针对性解决特定环境下图片无法显示的问题。
      • 缺点:需要了解该特定环境的相关知识,通用性稍差。
        4. 总结:
    • 对于获取到验证码图片后无法打开的问题,需要从多个方面进行排查。先检查图片格式,再查看获取图片的代码和链接是否正确,最后考虑解析图片的环境是否存在问题。通过逐步排查,找到导致图片无法打开的具体原因并解决。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日