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

Selenium获取Hepsiburada商品价格日期失败,无法生成走势图

解决Selenium爬取Hepsiburada价格数据为空的问题

1. 检查元素定位器是否失效

Hepsiburada的页面结构可能会更新,导致你之前用的XPath、CSS选择器失效:

  • 打开浏览器开发者工具(F12),手动定位价格和日期元素,确认当前的定位表达式是否正确
  • 替换旧的定位器,比如原来的//div[@class='old-price']可能已变更,以实际页面DOM结构为准

2. 添加显式等待,避免页面未加载完成就抓取

静态等待(time.sleep())稳定性差,改用Selenium显式等待确保元素加载完成:

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

# 等待价格列表元素出现,最长等待10秒
price_elements = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, "//更新后的价格元素XPath"))
)
date_elements = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.XPATH, "//更新后的日期元素XPath"))
)

3. 排查反爬机制

  • 检查是否需要登录:部分商品的历史价格仅对登录用户开放,尝试手动登录后再运行脚本
  • 验证是否触发验证码:如果页面出现验证码,需手动处理或添加验证码识别逻辑
  • 更换User-Agent:模拟真实浏览器请求,避免被识别为爬虫:
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
driver = webdriver.Chrome(options=options)
  • 控制请求频率:添加随机间隔的等待,避免短时间内频繁请求

4. 确认历史价格区域是否需要手动展开

部分商品的历史价格默认折叠,需点击展开按钮才能加载数据:

# 定位并点击展开按钮
expand_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//展开按钮的XPath"))
)
expand_btn.click()
# 等待展开后的数据加载完成
time.sleep(2) # 或用显式等待等待价格元素出现

5. 检查代码逻辑错误

  • 确认是否误用find_element(单个元素)而非find_elements(多个元素),导致仅获取到单个元素或无结果
  • 添加异常捕获,查看具体错误信息:
try:
    price_elements = driver.find_elements(By.XPATH, "//目标价格元素XPath")
    for elem in price_elements:
        prices.append(elem.text.strip())
except Exception as e:
    print(f"抓取价格时出错: {str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:42:11