You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py无法嵌入Sevenstore网站图片缩略图问题求助

问题分析与解决方法

核心原因

Sevenstore官网的图片URL设置了防盗链(Referer校验):浏览器从Sevenstore页面请求图片时会自动携带该网站的Referer头,符合服务器访问规则;但Discord的Embed爬虫请求图片时不会携带这个Referer,因此被服务器拒绝访问。这也是本地保存或托管平台的URL能正常显示的原因——这类URL没有Referer限制。

解决方案

方案1:尝试抓取图片的真实源URL

部分电商网站会用懒加载机制,将真实图片地址存在data-src、data-original这类属性中,而非src(src可能是占位图或临时URL)。修改Selenium的属性抓取代码:

# 替换原get_attribute('src'),优先尝试其他属性
Image = product_image[i].get_attribute('data-src')
# 若无效,再试:
# Image = product_image[i].get_attribute('data-original')

方案2:下载图片后上传到Discord(最可靠)

直接绕开防盗链限制,先下载图片再作为附件上传至Discord,Embed引用附件地址即可:

import requests
from io import BytesIO
import discord

# 1. 下载图片(必须携带Referer头,否则Sevenstore会拒绝请求)
headers = {'Referer': 'https://www.sevenstore.com/'}
response = requests.get(Image, headers=headers)
if response.status_code != 200:
    # 处理下载失败的逻辑
    pass

# 2. 将图片转换为Discord可上传的对象
img_buffer = BytesIO(response.content)
discord_file = discord.File(img_buffer, filename='product_thumbnail.jpg')

# 3. 设置Embed缩略图指向附件地址
embed.set_thumbnail(url='attachment://product_thumbnail.jpg')

# 4. 发送消息时附带文件
await channel.send(embed=embed, file=discord_file)

方案3:优化Selenium的等待逻辑

确保抓取图片URL时,图片已完全加载,避免获取到未初始化的空URL:

# 替换原等待逻辑,等待图片的src属性不为空
wait.until(
    lambda driver: driver.find_element(
        By.XPATH, '//div[@class="nodecor "]/span[1]/span[1]/div[1]/div[1]/span[1]/a[1]/img[1]'
    ).get_attribute('src') != ''
)

# 再执行图片URL抓取
product_image = driver.find_elements(By.XPATH, value='//div[@class="nodecor "]/span[1]/span[1]/div[1]/div[1]/span[1]/a[1]/img[1]')
Image = product_image[i].get_attribute('src')

内容的提问来源于stack exchange,提问作者user21113474

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:57:29