使用Selenium下载H&M网站图片遇ValueError: unknown url type问题求助
解决H&M网站图片下载时的ValueError问题
错误核心原因
img.get_attribute('src')返回了空字符串,导致wget.download无法解析无效的URL。H&M网站大概率采用了图片懒加载机制:初始状态下图片的src属性未填充,或者真实图片地址被存储在data-src、data-hm-lazyload-src这类替代属性中。
具体解决建议
确认图片真实地址的存储属性:
打开浏览器开发者工具(F12),定位目标图片元素,查看其属性列表。比如H&M的商品图常把真实URL放在data-src里,替换代码中的src为对应属性即可:# 示例:用data-src替代src获取真实地址 img_url = img.get_attribute('data-src') if img_url: wget.download(img_url, save_as)等待图片完全加载后再获取地址:
使用Selenium的显式等待,确保目标属性被填充后再执行下载操作:from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 先等待图片元素出现 img = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "img[alt*='牛仔裤']")) ) # 等待图片的目标属性非空 WebDriverWait(driver, 10).until( lambda d: img.get_attribute('data-src') != '' ) img_url = img.get_attribute('data-src') wget.download(img_url, save_as)模拟滚动触发懒加载:
部分图片需要滚动到可视区域才会加载真实地址,可通过JS脚本触发滚动:# 滚动到图片所在位置 driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'});", img) # 等待加载完成(可根据网络情况调整时长) import time time.sleep(2) img_url = img.get_attribute('data-src')添加URL有效性校验:
无论哪种场景,都要在下载前判断URL是否合法,避免无效请求:img_url = img.get_attribute('data-src') if img_url and img_url.startswith(('http://', 'https://')): wget.download(img_url, save_as) else: print(f"跳过无效图片地址: {img_url}")
内容的提问来源于stack exchange,提问作者Lily wu
相关产品推荐
相关产品推荐

