1

我正在使用 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!");
              }
           }
    }

但这无法找到匹配项。

关于如何确定是否匹配的任何想法?

4

2 回答 2

2

如果您可以使用 XPath,一个有用的 XPath 表达式是

//a[span[.//text()[. = 'magic']]]

这将选择aXML 文档中所有span具有文本节点后代的子节点,其字符串值为 string "magic"

于 2012-05-07T12:21:57.687 回答
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);
于 2012-05-07T06:22:48.983 回答