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

Selenium/Python弹窗Save按钮点击失败问题求助

解决弹窗中Save按钮点击失败的问题

先梳理你代码里的几个明显错误:

  1. 第一个XPATH语法错误://button[@class='btn btn-strong')] 多了一个右括号,正确写法是 //button[@class='btn btn-strong']
  2. 第三个复制的XPATH存在引号嵌套冲突:你用双引号包裹XPATH,但XPATH内部也用了双引号,导致语法报错,改成单引号包裹XPATH即可,示例:
    input_element = driver.find_element(By.XPATH,'//*[@id="main-content-body"]/div[1]/div[3]/div/div/div[3]/div[1]/section/div[2]/div[2]/button[2]')
    

下面给你几个更可靠的定位方案,优先用文本定位(按钮文本明确):

方法1:通过按钮文本定位(最推荐)

利用按钮内的<span>Save</span>文本做定位,同时等待元素可交互后再点击:

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

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Save']]"))
).click()

也可以直接定位span元素后点击其父按钮:

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//span[text()='Save']/parent::button"))
).click()

方法2:通过Class属性定位(修正后)

注意用element_to_be_clickable替代presence_of_element_located——后者仅保证元素存在,不确保元素可交互:

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-strong']"))
).click()

用CSS选择器会更简洁:

WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-strong"))
).click()

额外注意事项

  • 如果弹窗嵌套在iframe里,必须先切换到iframe才能定位元素:
    # 先定位iframe(示例用id,实际根据页面调整)
    iframe = driver.find_element(By.ID, "target-iframe-id")
    driver.switch_to.frame(iframe)
    # 执行按钮点击操作
    # 操作完成后切回主文档
    driver.switch_to.default_content()
    
  • 避免使用你复制的那种长绝对XPATH,页面结构稍有变动就会失效,优先用相对定位或文本、Class组合定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:28:14