Selenium如何通过Xpath结合正则匹配id前缀为jsc_c_的元素
问题解决方法
错误原因说明
XPath 内置的contains()方法仅支持普通字符串匹配,不识别通配符、正则语法,你写法中的*+会被当做普通字符匹配,因此无法定位到目标元素。
方案1:无需正则,优先推荐(全版本兼容)
你的目标元素id均以jsc_c_为固定前缀,直接使用XPath的starts-with()方法即可满足匹配需求,兼容性最好,支持所有浏览器和Selenium版本:
XPath规则写法://*[starts-with(@id,'jsc_c_')]/span
对应Selenium代码(推荐使用新版Selenium的By类写法,旧版find_element_by_xpath已废弃):
from selenium.webdriver.common.by import By # 匹配单个元素 element = driver.find_element(By.XPATH, "//*[starts-with(@id,'jsc_c_')]/span") # 匹配所有符合规则的元素 elements = driver.find_elements(By.XPATH, "//*[starts-with(@id,'jsc_c_')]/span")
方案2:正则匹配实现(适用于更复杂的匹配规则)
原生浏览器内置的XPath 1.0引擎不支持正则语法,如果你确实需要用正则实现更复杂的id规则匹配,可以通过执行JavaScript的方式实现:
示例代码(匹配id符合jsc_c_+任意字母数字组合规则的元素下的span):
# 匹配所有符合规则的span元素 spans = driver.execute_script(""" return Array.from(document.querySelectorAll('span')).filter(span => { const parentId = span.parentElement?.id; return parentId && /^jsc_c_[a-zA-Z0-9]+$/.test(parentId); }); """)
内容的提问来源于stack exchange,提问作者Amir Katorza
相关产品推荐
相关产品推荐

