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

Python Selenium如何点击弹窗内的加入购物车和加入心愿单按钮

问题修复方案

核心错误原因

  • 未定义iframe变量就执行frame切换:当前场景是body类带modal-open的模态弹窗,属于顶层DOM元素,不需要切换iframe,错误的frame切换直接导致后续所有元素定位失效
  • 未设置元素显式等待:模态弹窗为异步渲染,元素未完成加载就执行定位操作必然触发元素找不到异常
  • 使用绝对路径Xpath:页面结构稍有变动就会导致定位失效,优先使用相对路径结合元素属性定位

修正后可运行代码

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

driver = webdriver.Chrome(executable_path='C:\Program Files\JetBrains\PyCharm 2021.1.1/chromedriver.exe')
# 全局设置显式等待,最长等待10秒
wait = WebDriverWait(driver, 10)
actions = ActionChains(driver)

driver.maximize_window()
driver.get("http://esindbaad.com/")

# 鼠标悬停进入对应分类
beauty = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='head-wrapper']//ul/li[3]/a")))
body = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='head-wrapper']//ul/li[3]//div[3]/ul/li[6]/a")))
actions.move_to_element(beauty).move_to_element(body).click().perform()

# 点击商品触发模态弹窗
product = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='content']//div[1]/div/a")))
actions.move_to_element(product).click().perform()

# 等待弹窗加载完成后点击加入购物车
addcart = wait.until(EC.element_to_be_clickable((By.ID, "button-cart")))
addcart.click()

# 点击加入心愿单
wishlist = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='product']//ul/li/a[contains(@href,'wishlist')]")))
wishlist.click()

driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")

额外优化建议

  • 可以给Xpath增加属性校验,比如加入心愿单的按钮可以添加contains(@class,'wishlist')这类属性判断,进一步提升定位稳定性
  • 如果点击时遇到元素被遮挡的情况,可以替换为JS执行点击:driver.execute_script("arguments[0].click();", addcart)

内容的提问来源于stack exchange,提问作者Usman Riaz Nain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 02:27:03