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)
修正步骤:
- 先打印
resp.text,搜索是否存在目标文本。如果没有,说明是动态渲染,直接换用Selenium。 - 若存在目标文本,调整匹配规则为不区分大小写,避免文本格式差异:
if "add to cart" in resp.text.lower() or "in stock" in resp.text.lower(): - 添加浏览器请求头,规避反爬:
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仍判断失效,大概率是选择器错误,按以下步骤修正:
- 手动打开商品页面,F12检查元素:
- 复制"Add to Cart"按钮的CSS选择器/XPath,或"In stock"文本的定位规则。
- 修改判断逻辑,用
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() - 可选:添加显式等待,确保元素加载完成后再判断:
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 playsoundfrom playsound import playsound playsound("提示音文件路径.mp3")
内容的提问来源于stack exchange,提问作者CaptainNewb
相关产品推荐
相关产品推荐

