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

Python网页库存监控代码调试求助:龙舌兰酒补货提醒

调试Total Wine库存监控脚本的解决方案

核心问题排查方向

  • 动态渲染导致内容缺失:Total Wine页面大概率用JavaScript加载库存状态,直接用requests爬取原始HTML拿不到渲染后的"Add to Cart"按钮或"In stock"文本,导致判断失效。
  • 选择器/文本匹配错误:就算拿到正确页面内容,你用的CSS选择器、XPath或文本匹配规则可能和实际页面元素不匹配(比如大小写、空格、class名变化)。
  • 反爬拦截:无请求头的requests请求会被网站识别为爬虫,返回内容异常。

分场景调试方案

场景1:用requests静态爬取的情况

如果你的代码是类似以下结构:

import requests
from time import sleep

URL = "你的商品URL"

while True:
    resp = requests.get(URL)
    if "Add to Cart" in resp.text or "In stock" in resp.text:
        print("有货了!")
        # 提示音代码
        break
    sleep(60)

修正步骤:

  1. 先打印resp.text,搜索是否存在目标文本。如果没有,说明是动态渲染,直接换用Selenium。
  2. 若存在目标文本,调整匹配规则为不区分大小写,避免文本格式差异:
    if "add to cart" in resp.text.lower() or "in stock" in resp.text.lower():
    
  3. 添加浏览器请求头,规避反爬:
    headers = {
        "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"
    }
    resp = requests.get(URL, headers=headers)
    

场景2:用Selenium动态爬取的情况

如果用Selenium仍判断失效,大概率是选择器错误,按以下步骤修正:

  1. 手动打开商品页面,F12检查元素:
    • 复制"Add to Cart"按钮的CSS选择器/XPath,或"In stock"文本的定位规则。
  2. 修改判断逻辑,用find_elements(找不到不会报错,通过长度判断是否存在):
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.get("你的商品URL")
    
    while True:
        # 检查添加购物车按钮是否存在
        add_cart_btn = driver.find_elements(By.CSS_SELECTOR, ".btn-add-to-cart")
        # 检查库存状态文本
        stock_status = driver.find_elements(By.XPATH, "//*[contains(text(), 'In stock')]")
        
        if len(add_cart_btn) > 0 or len(stock_status) > 0:
            print("有货了!")
            # Windows提示音示例
            import winsound
            winsound.Beep(1500, 2000)
            break
        sleep(60)
        driver.refresh()
    
  3. 可选:添加显式等待,确保元素加载完成后再判断:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 替换循环内的判断逻辑
    try:
        WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".btn-add-to-cart")))
        print("有货了!")
        # 提示音代码
        break
    except:
        try:
            WebDriverWait(driver, 2).until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'In stock')]")))
            print("有货了!")
            # 提示音代码
            break
        except:
            pass
    

跨平台提示音实现

  • Windows:
    import winsound
    winsound.Beep(1500, 2000)  # 频率1500Hz,时长2000ms
    
  • Mac/Linux:
    先安装依赖:
    pip install playsound
    
    再调用:
    from playsound import playsound
    playsound("提示音文件路径.mp3")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:00:02