Selenium无法获取目标元素文本,请求正确定位方案
问题分析与解决方案
你的问题核心是错误定位了<br>标签——<br>是换行元素,本身不包含任何文本内容,调用getText()自然无法获取目标文本。目标文本“50,00 € , 9 Plätze vorhanden - anmelden”实际是第4个课程条目下、两个<a>标签之间的文本节点,需要针对这个文本节点或其所在父容器定位。
以下是几种可行的实现方案:
方案1:直接定位目标文本节点
通过XPath找到两个目标<a>标签之间的文本节点,借助JavaScript提取内容(Selenium默认不直接支持定位文本节点):
driver.get("https://www.drk-kv-calw.de/kurse/erste-hilfe-eh/rotkreuzkurs-erste-hilfe.html"); // 定位第4个"Link zur Karte"链接 WebElement mapLink = driver.findElement(By.xpath("(//a[text()='Link zur Karte'])[4]")); // 提取该链接后的兄弟文本节点内容 String targetText = (String)((JavascriptExecutor)driver).executeScript( "return arguments[0].nextSibling.textContent.trim();", mapLink ); System.out.println("text : " + targetText);
方案2:通过父容器提取文本并过滤
找到第4个课程条目的父容器,提取全部文本后用正则匹配目标内容:
driver.get("https://www.drk-kv-calw.de/kurse/erste-hilfe-eh/rotkreuzkurs-erste-hilfe.html"); // 定位第4个课程条目的容器(可根据页面结构调整标签或class) WebElement courseItem = driver.findElement(By.xpath("(//div[contains(@class, 'kurs-item')])[4]")); String fullText = courseItem.getText(); // 正则匹配价格和空位信息 Pattern pattern = Pattern.compile("(\\d+,\\d+ € , \\d+ Plätze vorhanden - anmelden)"); Matcher matcher = pattern.matcher(fullText); if (matcher.find()) { System.out.println("text : " + matcher.group(1)); }
方案3:关联两个<a>标签定位父元素
利用你已定位的两个<a>标签,找到共同父元素后提取文本:
driver.get("https://www.drk-kv-calw.de/kurse/erste-hilfe-eh/rotkreuzkurs-erste-hilfe.html"); WebElement mapLink = driver.findElement(By.xpath("(//a[text()='Link zur Karte'])[4]")); WebElement registerLink = driver.findElement(By.xpath("(//a[@title='bei Kurs anmelden'])[4]")); // 获取两个链接的共同父容器 WebElement parentContainer = mapLink.findElement(By.xpath("./ancestor::div[contains(@class, 'kurs-details')]")); // 提取并过滤文本 String allText = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].textContent;", parentContainer); String targetText = allText.split("Link zur Karte")[1].split("anmelden")[0].trim(); System.out.println("text : " + targetText);
内容的提问来源于stack exchange,提问作者Researcher
相关产品推荐
相关产品推荐

