如何解决Selenium Python点击SVG元素关闭弹窗失败问题?
解决Selenium Python点击SVG关闭弹窗的问题
问题根源
- 第一个XPath使用了
@id="Root",但目标SVG无此属性,必然定位失败; - 第二个XPath中div的class匹配有误:原HTML里div的class是
" light-ui-pop-up--header"(开头带空格),直接写@class="light-ui-pop-up--header"会因空格不匹配找不到元素; - 未处理弹窗的动态加载,页面未渲染完成就执行查找,导致元素未被定位到。
解决方案
核心思路
用显式等待确保弹窗元素加载完成,同时修正定位表达式的匹配逻辑。
代码示例
方式一:修正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
相关产品推荐
相关产品推荐

