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
相关产品推荐
相关产品推荐

