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

使用Python Selenium爬取Depop商品信息时遇元素定位失败求助

解决Selenium爬取Depop商品信息时的"no such element"错误

问题根源分析

  1. XPath语法错误:你在定位时使用了//*[@id="main"]/div[1]/div[3]/div/div[1]/p/text(),Selenium的find_element只能定位元素节点,不能直接定位文本节点,这会直接导致找不到元素的错误。
  2. 绝对XPath不稳定:硬编码的绝对路径依赖页面固定结构,Depop的页面布局一旦微调,路径就会失效。
  3. 固定等待不可靠:time.sleep()是固定时长等待,无法适配页面加载的实际速度,可能元素还未加载完成就执行定位操作。
  4. Cookie弹窗处理后的页面状态:点击弹窗后页面可能有重新渲染,直接执行定位可能时机不对。

具体解决步骤

  • 改用相对XPath或属性定位,比如通过元素的class、data属性等稳定标识定位
  • 使用显式等待(WebDriverWait),等待元素可交互后再操作,替代固定sleep
  • 移除XPath中的text(),先定位元素节点再提取文本

修改后的代码示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 目标商品URL
url = 'https://www.depop.com/products/_realvintage-vintage-south-beach-florida-embroidered/'

# Chrome配置
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome("D:\\Selenium_python2\\chromedriver.exe", options=chrome_options)

driver.get(url)

# 显式等待Cookie弹窗并点击同意(等待元素可点击)
try:
    accept_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "Accept")]'))
    )
    accept_btn.click()
except Exception as e:
    print("Cookie弹窗未出现或点击失败:", e)

# 显式等待目标元素加载完成并提取文本
try:
    # 改用相对XPath定位商品描述元素(示例)
    target_element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//div[@data-testid="product-description"]/p'))
    )
    text = target_element.text
    print("提取到的文本:", text)

    # 扩展:提取其他商品信息(标题、价格、成色等)
    title = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//h1[@data-testid="product-title"]'))
    ).text
    price = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//span[@data-testid="product-price"]'))
    ).text
    condition = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(text(), "Condition")]/following-sibling::div'))
    ).text
    size = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(text(), "Size")]/following-sibling::div'))
    ).text
    brand = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//div[contains(text(), "Brand")]/following-sibling::div'))
    ).text

    print("\n商品信息:")
    print(f"标题: {title}")
    print(f"价格: {price}")
    print(f"成色: {condition}")
    print(f"尺码: {size}")
    print(f"品牌: {brand}")

except Exception as e:
    print("定位元素失败:", e)

# 关闭浏览器(可选)
# driver.quit()

额外注意事项

  • 若遇到反爬机制,可以尝试添加请求头(比如User-Agent),或者模拟滚动页面触发元素加载
  • 定期检查Depop的页面元素属性,避免因为网站更新导致定位失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:45:30