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

如何解决Selenium Python点击SVG元素关闭弹窗失败问题?

解决Selenium Python点击SVG关闭弹窗的问题

问题根源

  1. 第一个XPath使用了@id="Root",但目标SVG无此属性,必然定位失败;
  2. 第二个XPath中div的class匹配有误:原HTML里div的class是" light-ui-pop-up--header"(开头带空格),直接写@class="light-ui-pop-up--header"会因空格不匹配找不到元素;
  3. 未处理弹窗的动态加载,页面未渲染完成就执行查找,导致元素未被定位到。

解决方案

核心思路

用显式等待确保弹窗元素加载完成,同时修正定位表达式的匹配逻辑。

代码示例

方式一:修正XPath表达式
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wd = webdriver.Chrome()
wd.get("https://data.anbima.com.br/debentures/JTEE11/caracteristicas")

# 等待关闭按钮可点击,最长等待10秒
close_btn = WebDriverWait(wd, 10).until(
    EC.element_to_be_clickable(
        (By.XPATH, '//div[normalize-space(@class)="light-ui-pop-up--header"]/*[name()="svg"][@name="ClosePopUp"]')
    )
)
close_btn.click()

normalize-space(@class)会自动去除class属性值前后的空格,同时处理中间多余空格,确保匹配到目标div。

方式二:使用CSS选择器(更简洁)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wd = webdriver.Chrome()
wd.get("https://data.anbima.com.br/debentures/JTEE11/caracteristicas")

# 等待关闭按钮加载完成
close_btn = WebDriverWait(wd, 10).until(
    EC.element_to_be_clickable(
        (By.CSS_SELECTOR, 'div.light-ui-pop-up--header svg.pop-up--close-btn')
    )
)
close_btn.click()

CSS选择器会忽略class值前后的空格,直接匹配包含目标类名的元素,定位逻辑更直观。

备用方案:模拟鼠标点击(若直接点击无效)

如果元素存在但点击无响应,可尝试用ActionChains模拟鼠标操作:

from selenium.webdriver.common.action_chains import ActionChains

# 等待元素加载完成后执行
ActionChains(wd).move_to_element(close_btn).click().perform()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:17