我正在使用webdriver抓取网站以查找用魔术常量修饰的链接,但文本可能会被格式化:
<a href="blah" ..><span blah>magic</span></a>
和许多级别
<a href="blah" ..><span blah>A <span blah><b>magic</b></span> evening</span></a>
我不知道它是否被格式化,或者它是否已经过了多少级别,因为我正在搜索任意网站。
我的代码看起来像这样:
List<WebDriver> links = driver.getElements(By.tagName("a"));
for (WebElement link : links) {
List<WebElement> children = link.getElements(By.tagName("*"));
for (WebElement child : children) {
if (myPattern.matcher(child.getText()).matches()) {
System.out.println("found match!");
}
}
}
但是没能找到匹配。
有关如何确定是否匹配的任何想法?
答案 0 :(得分:2)
如果你可以使用XPath,一个有用的XPath表达式是:
//a[span[.//text()[. = 'magic']]]
这将选择XML文档中具有a
子级的所有span
,该子级具有文本节点后代,其字符串值为字符串"magic"
。
答案 1 :(得分:1)
尝试使用jsoup来获取文字内容,然后从那里开始非常简单
String html = "<a href=\"blah\"><span blah>...<b>magic</b>...</span></a>"
String string = Jsoup.parse(html).text(); //A magic evening
if(string.contains("magic")){ //you can optimize to have word match, e.g. not "magical"
//it's a match
}
修改强>
我很长时间没有使用WebDriver / Selenium,但我看到过这样的东西看起来可能会产生同样的效果
String innerText = ((JavascriptExecutor)driver).executeScript("return arguments[0].innerText", element);