使用Selenium+Python+XPATH抓取图片URL失败求助
排查Kohls商品图片URL抓取失败的问题
1. 页面没加载完就急着定位
Kohls的商品图大多是懒加载,页面得等几秒才能渲染完全。如果脚本一打开页面就跑XPATH定位,元素还没出来肯定返回None,甚至会因为页面状态异常导致浏览器直接关闭。
- 换用显式等待,等图片元素加载出来再操作:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等10秒,直到目标图片元素出现 wait = WebDriverWait(driver, 10) img_elem = wait.until(EC.presence_of_element_located((By.XPATH, "你的XPATH路径")))
2. XPATH写得不对
虽然你没贴目标HTML,但这类问题常见坑点:
- 用了动态属性:比如class/id带随机字符串,页面刷新一次属性就变,XPATH自然定位不到
- 层级写死:比如硬写
//div[3]/div[1]/img,网站微调页面结构就失效,尽量用带语义的属性定位,比如//img[@alt='商品名称']或者//div[contains(@class,'product-img')]/img - 没处理iframe:如果图片嵌套在iframe里,必须先切换到iframe才能定位元素
- 找错属性:懒加载图片的真实URL可能存在
data-src而不是src里,别直接取src
3. 网站反爬搞事情
Kohls能识别Selenium的自动化特征,直接给你关页面或者拦截请求:
- 给Chrome加配置,隐藏自动化标识:
from selenium.webdriver.chrome.options import Options opts = Options() opts.add_experimental_option("excludeSwitches", ["enable-automation"]) opts.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=opts)
- 加随机等待时间,别秒点秒操作,模拟真人浏览节奏
- 如果遇到验证码,手动处理完再让脚本继续跑
4. 浏览器和驱动版本不兼容
Chrome和ChromeDriver版本对不上的话,启动后直接关浏览器是常有的事。去Chrome设置里看版本号,下载对应大版本的ChromeDriver(比如Chrome 118就下118.x的驱动)。
5. 脚本逻辑有bug
比如:
- 定位到元素后,错用
elem.text取图片URL,应该用elem.get_attribute('src')或者elem.get_attribute('data-src') - 还没提取数据就提前调用
driver.quit(),浏览器直接关了自然拿不到结果
内容的提问来源于stack exchange,提问作者Ikuso
相关产品推荐
相关产品推荐

