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

如何用Python Selenium(结合XPath)实现商品快速抢购?

解决Selenium无法获取商品库存的问题

1. 先修正核心逻辑:提取文本而非元素对象

你当前代码仅获取了元素对象,没有提取库存的实际数值。需要通过.text属性拿到元素内的文本,再转为整数才能进行判断:

driver.get("https://theebayshop.to/product/35")
stock_element = driver.find_element_by_xpath("//div[@class='stock-header']//div")
# 提取文本并转为整数
stock_value = int(stock_element.text.strip())
print(stock_value)

2. 简化XPath,避免依赖过深层级

你原有的XPath层级太复杂,页面结构稍有变动就会失效。建议用更精准的定位方式,比如直接定位stock-header下的数值元素:

# 简化后的XPath,优先定位库存所在的核心容器
stock_element = driver.find_element_by_xpath("//div[@class='stock-header']//div[contains(text(), '')]")
# 如果库存文本带标识(比如"库存:3"),可以针对性提取数字
stock_text = stock_element.text.strip()
stock_value = int(''.join(filter(str.isdigit, stock_text)))

也可以用浏览器F12开发者工具,右键目标元素复制相对XPath,比手动编写的更可靠。

3. 处理页面动态加载延迟

电商页面的库存常通过AJAX动态渲染,Selenium可能在元素未加载完成时就执行查找,导致失败。用显式等待解决:

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

driver.get("https://theebayshop.to/product/35")
# 等待最多10秒,直到库存元素可见
wait = WebDriverWait(driver, 10)
stock_element = wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='stock-header']//div")))
stock_value = int(stock_element.text.strip())

4. 检查是否存在iframe嵌套

如果库存元素在iframe内,必须先切换到iframe才能查找:

# 定位并切换到目标iframe(替换为实际iframe的定位方式)
iframe = driver.find_element_by_xpath("//iframe[@id='stock-iframe']")
driver.switch_to.frame(iframe)
# 查找库存元素
stock_element = driver.find_element_by_xpath("//div[@class='stock-header']//div")
# 操作完成后切回主文档
driver.switch_to.default_content()

5. 实现库存判断逻辑

拿到库存数值后,即可执行你需要的判断:

if 1 <= stock_value < 7:
    # 执行抢购操作,比如点击购买按钮
    buy_btn = driver.find_element_by_xpath("//button[@class='buy-btn']")
    buy_btn.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:15:47