使用Python与BeautifulSoup实现添加购物车按钮检测的问题求助
问题:使用BeautifulSoup检测「Add to Cart」按钮并实现循环通知
我想要使用BeautifulSoup爬取指定网站,当检测到「Add to Cart」按钮时进行通知,未检测到则循环执行。目前代码编写初期遇到问题无法正常运行,恳请技术协助。
目标网页元素代码
<div class="carting"> <button type="button" class="btn addtocart" data-id="45399" data-cart-qty="0" data-title="Walking Dead Compendium TP Vol 03"> <img src="/images/cart.png" alt="Add to Cart"> " Add to Cart" </button> <button type="button" class="btn addtolist" data-id="45399" data-code="AUG150497D" data-title="random title ">…</button> </div>
原错误脚本
from bs4 import BeautifulSoup import requests def main(): requests.get("https://www.websiteurl.com") doc = BeautifulSoup(result, "html.parser") if doc.find_all(class_='btn addtocart', text=" Add to Cart "): print("Stuff")
问题分析与修正脚本
原脚本存在的问题
requests.get的结果未赋值给变量,直接使用result会触发NameErrortext参数匹配过于严格:按钮内文本包含引号,且存在空格/换行干扰,无法精准匹配- 缺少循环逻辑,未实现"未检测到则重复执行"的需求
- 未调用
main()函数,代码无法执行 - 无异常处理,请求失败时会直接崩溃
修正后的脚本
from bs4 import BeautifulSoup import requests import time def check_add_to_cart(): url = "https://www.websiteurl.com" try: # 发送请求并检查响应状态 response = requests.get(url, timeout=10) response.raise_for_status() doc = BeautifulSoup(response.text, "html.parser") # 通过class定位按钮,再检查文本内容(去除多余空格和引号) add_cart_btn = doc.find(class_="btn addtocart") if add_cart_btn: # 提取按钮文本并清理格式 btn_text = add_cart_btn.get_text(strip=True).strip('"') if btn_text == "Add to Cart": print("检测到「Add to Cart」按钮!") # 这里可以添加通知逻辑,比如弹窗、发邮件等 return True print("未检测到按钮,继续等待...") return False except requests.exceptions.RequestException as e: print(f"请求出错: {e}") return False def main(): # 设置循环间隔(单位:秒,避免频繁请求被网站拦截) check_interval = 60 while True: if check_add_to_cart(): break # 检测到按钮后退出循环 time.sleep(check_interval) if __name__ == "__main__": main()
关键修改说明
- 保存
requests.get的响应结果到response变量,通过response.text传入BeautifulSoup - 使用
find()代替find_all(),只需定位单个按钮即可 - 用
get_text(strip=True)清理文本中的空格、换行,再去除引号后匹配 - 添加循环逻辑,通过
time.sleep()设置检测间隔,避免触发网站反爬机制 - 增加异常捕获,处理请求超时、连接失败等情况
- 规范函数调用逻辑,通过
if __name__ == "__main__"执行主函数
内容的提问来源于stack exchange,提问作者joshmcdermott
相关产品推荐
相关产品推荐

