Selenium用XPath取mailto链接href属性报[object Attr]如何解决
问题原因
find_element_by_xpath方法要求传入的 XPath 表达式必须返回DOM 元素节点,你写的 XPath 结尾加了/@href会直接返回 href 属性节点,不符合方法入参要求,因此抛出 selector 无效错误。getAttribute方法是作用在元素对象上的,不需要在 XPath 层面提前取属性,拿到元素后调用即可获取对应属性值。
正确写法
标准用法(推荐)
先定位到匹配的 <a> 元素,再调用属性获取方法:
// Java 版本写法 WebElement element = driver.findElement(By.xpath("//a[contains(@href, 'mailto')]")); String mailtoUrl = element.getAttribute("href");
如果使用的是 Python 版本的 Selenium,方法名为下划线分隔格式:
# Python 版本写法 element = driver.find_element_by_xpath("//a[contains(@href, 'mailto')]") mailto_url = element.get_attribute("href")
直接通过XPath取属性值的替代方案
如果你确实需要直接通过 XPath 表达式取属性值,可以通过执行 JS 实现:
// Java 示例 String mailtoUrl = (String) ((JavascriptExecutor) driver).executeScript( "return document.evaluate(\"//a[contains(@href, 'mailto')]/@href\", document, null, XPathResult.STRING_TYPE, null).stringValue;" );
内容的提问来源于stack exchange,提问作者Jules Galian
相关产品推荐
相关产品推荐

