使用Selenium获取亚马逊商品价格子元素的问题
问题分析与解决方案
你的XPath写法存在两个关键错误:
- div的class属性值未闭合双引号,直接导致XPath语法失效;
- div节点与span节点的路径拼接逻辑错误,原代码中未闭合div的class就拼接
//span,完全不符合XPath语法规范。
正确的XPath写法
直接修正语法问题,闭合div的class引号,确保路径层级正确:
totalPrices = driver.find_elements(By.XPATH, "//div[@class='sg-col-4-of-24 sg-col-4-of-12 s-result-item s-asin sg-col-4-of-16 sg-col s-widget-spacing-small sg-col-4-of-20']//span[@class='a-price-whole']")
更健壮的定位方案
亚马逊商品div的完整class可能随页面更新动态变化,依赖完整class定位容易失效。推荐用更稳定的核心特征定位,比如结合s-result-item和s-asin这两个固定类:
totalPrices = driver.find_elements(By.XPATH, "//div[contains(@class, 's-result-item') and contains(@class, 's-asin')]//span[@class='a-price-whole']")
反爬与元素加载注意
亚马逊有反爬机制,直接调用find_elements可能因元素未加载完成导致找不到。建议使用显式等待确保元素加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待10秒,直到所有目标元素出现 wait = WebDriverWait(driver, 10) totalPrices = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[contains(@class, 's-result-item') and contains(@class, 's-asin')]//span[@class='a-price-whole']")))
内容的提问来源于stack exchange,提问作者Jesús Navarro Hernández
相关产品推荐
相关产品推荐

