0

我根本没有任何Java经验,所以我有点迷茫。使用 selenium,我已经下载了页面的 html,并将其存储在字符串中。现在我想抓取所有数据并将其放入数组中。所以在 jquery 风格中,我会说它是这样的:

$('div[align="center"]').each(function(){
 array[] = $(this).text();
});

不同之处在于现在我必须从字符串中取出它并在 java 中执行它。因为我没有使用 java 的经验,所以我正在寻找最简单的方法。

谢谢你的帮助!

4

3 回答 3

1

Instead of getting the whole HTML by Selenium (there are lighter tools for that, see Get html file Java), you can pick the right element with Selenium.

If you're using Selenium RC:

// assuming 'selenium' is a healthy Selenium instance
String divText = selenium.getText("css=div[align='center']");

or if you're using Selenium 2 (WebDriver):

// assuming 'driver' is a healthy WebDriver instance
String divText = driver.findElement(By.cssSelector("div[align='center']")).getText();

If there are actually more <div align="center"> elements, you can get them all:

List<WebElement> divList = driver.findElements(By.cssSelector("div[align='center']"));
// and use every single one
for (WebElement elem : divList) {
    System.out.print(elem.getText());
}

The Selenium JavaDocs. In particular, you want to see WebDriver, WebElement.

And the Selenium documentation in examples. Read it.

于 2012-05-09T17:32:45.443 回答
0

我建议你阅读这个问题:

使用Java使用正则表达式查找更大字符串的子字符串

这里唯一的困难是您必须构建的正则表达式,但这不是 java 问题。

请阅读有关换行符和使用 Pattern.DOTALL 标志的注释。

编辑:正如 Luciano 提到的,我会寻找一种更好的方式来阅读 html。你String可能包含更多,<div align="center">你可能不会只得到你想要的东西。

编辑:

这段代码似乎工作:

String html = "<div align=\"center\">text</div>";

Pattern MY_PATTERN = Pattern.compile("<div align=\"center\">(.*?)</div>");

Matcher m = MY_PATTERN.matcher(html);
while (m.find()) {
    String s = m.group(1);
    System.out.println(s);
}
于 2012-05-09T15:33:56.370 回答
0

使用 selenium,而不是下载源页面,使用 selenium 来获取您想要从其中获取文本的 html 元素,方法是使用 xpath 或一些定位器(Selenium 定位策略)..然后执行 getText..类似..selenium.getText(locator_of_element)。如果它是一个元素列表,那么您可以在定位器前面使用索引进行循环,例如。//div[0], //div[i] 等

希望能帮助到你..

于 2012-05-09T17:32:17.377 回答