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

使用Selenium定位门店位置时出现NoSuchElementException问题求助

修复Selenium定位门店按钮的NoSuchElementException错误

错误原因分析

  • By.CLASS_NAME用法错误:你传入了多个类名(bst-btn.bst-btn-small...),但By.CLASS_NAME仅支持单个类名,多类名组合需要通过By.CSS_SELECTOR实现。
  • 未等待元素加载:页面未完全渲染就执行查找元素操作,目标元素尚未生成导致定位失败。
  • Cookie弹窗干扰:页面加载后可能弹出Cookie同意提示,遮挡或影响目标元素的可访问性。

修复后的代码

# imports
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

# load page 
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://www.samsclub.com/c/grocery/1444?xid=hdr:shop:grocery")
driver.maximize_window()

# 处理Cookie弹窗(如果存在)
try:
    accept_cookie = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "onetrust-accept-btn-handler"))
    )
    accept_cookie.click()
except:
    pass  # 无弹窗则跳过

# 等待并定位门店按钮(改用CSS_SELECTOR)
clubname = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, ".bst-btn.bst-btn-small.bst-btn-ghost.sc-chevron-button.flyout-trigger.blue-steel-button"))
)
clubname.click()

# 等待并点击"find other clubs"链接
link = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "find other clubs"))
)
link.click()

# 等待并输入邮编
zip_input = WebDriverWait(driver, 15).until(
    EC.visibility_of_element_located((By.ID, "inputbox11"))
)
zip_input.clear()
zip_input.send_keys("68023")
zip_input.submit()

# 等待并设置默认门店
make_this_store = WebDriverWait(driver, 15).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "Make this your club"))
)
make_this_store.click()

# 可选:操作完成后关闭浏览器
# driver.quit()

关键修复点说明

  • 修正定位方式:将By.CLASS_NAME替换为By.CSS_SELECTOR,支持多类名组合定位规则。
  • 添加显式等待:通过WebDriverWait配合预期条件,确保元素加载完成后再执行操作,避免页面渲染延迟引发的错误。
  • 处理Cookie弹窗:增加弹窗处理逻辑,避免弹窗遮挡目标元素导致定位失败。
  • 规范变量名:将zip改为zip_input,避免与Python内置函数zip重名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:16:11