如何解决Discord机器人随机截图命令中图片无法显示的问题
问题原因
prnt.sc提供的短链是网页地址,而非直接的图片资源链接。Discord在渲染Embed时,只会抓取直接指向图片文件的URL(比如以.png/.jpg结尾的链接),无法从网页中提取图片内容,所以导致图片无法显示。
解决方案
需要先请求prnt.sc的页面,解析出页面里的真实图片URL,再将这个URL用于Embed的图片设置。
首先安装依赖库(如果未安装):
pip install requests beautifulsoup4
修改后的代码:
import random import string import requests from bs4 import BeautifulSoup import discord if message.content.startswith(prefix + "rss"): # 生成随机6位短链后缀 rss_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=6)) prnt_url = f"https://prnt.sc/{rss_suffix}" try: # 模拟浏览器请求页面,避免被反爬拦截 response = requests.get(prnt_url, headers={"User-Agent": "Mozilla/5.0"}) response.raise_for_status() # 解析页面提取真实图片地址 soup = BeautifulSoup(response.text, 'html.parser') img_tag = soup.find("img", class_="no-click screenshot-image") if not img_tag or not img_tag.get("src"): await message.channel.send("未找到有效截图,请重试!") return img_url = img_tag["src"] # 处理相对路径的图片地址 if not img_url.startswith("http"): img_url = f"https:{img_url}" # 生成Embed并发送 embed = discord.Embed(title="随机截图", color=0x109319) embed.set_image(url=img_url) await message.channel.send(embed=embed) except requests.exceptions.RequestException as e: await message.channel.send(f"获取截图失败:{str(e)}")
注意事项
- 加入
User-Agent是为了绕过prnt.sc的基础反爬机制,模拟正常浏览器访问。 - 部分短链可能对应已删除或不存在的截图,所以需要添加异常处理和空值检查,避免机器人运行报错。
内容的提问来源于stack exchange,提问作者IDGBAN
相关产品推荐
相关产品推荐

