获取没有标识符的数据

时间:2014-08-10 09:22:18

标签: java selenium xpath selenium-webdriver

对于描述性统计分析,我需要抓取网页数据。

一条记录如下:

<div class="space"></div>

    <p style="margin-bottom: -5px;">R110327</p>

    <h1>Test</h1>

    <div class="hline_index"></div>

    <p>TestProfession<br>
    city, street<br>
    Tel: 129128312 Serie, Fax: 214213413<br>
    Email: <a href="mailto:test">test</a><br>
    Web: <a href="test.at" target="_blank">http://www.test.at</a><br>
    <br>
    Language: English<br>
    Profession: meditation, sport<br></p>

    <div class="hline_index"></div>

    <div class="space"></div>

我正在使用selenium 2.42.2这样做。出于测试目的,我试图收集fullName, profession and the street

public ArrayList<Person> getWantedFields() {
    log.info("retrieve wanted fields");

    resultList = new ArrayList<Person>();

    WebElement fullName = driver.findElement(By.xpath("//h1"));
    WebElement profession = driver.findElement(By.xpath("//p"));
    WebElement street = driver.findElement(By.xpath("//p/br[1]"));

    //2811 results
    for (int i = 0; i < 2811; i++) {
        resultList.add(new Person(fullName.getText(), profession.getText(), street.getText(), null, null, null, null, null));                   
    }

    log.info(resultList.toString());

    return resultList;
}

然而,我只会回来:

[Person [fullName=Search, profession=, street=, ...

正如你所看到的那样,只有第一个字段给我的文本总是相同,而另外两个给我回来了#34;&#34;。

我认为我的xpath是错误的,但是当我没有标识符时,我很想获得想要的字段。

有关如何获取这三个字段的任何建议吗?

感谢您的回答!

1 个答案:

答案 0 :(得分:1)

您可能在之前有一些<p>元素您要访问的元素。

您实际想要访问的所有元素都在<div id="content_head_folge">

因此,您应该使用//div[@id='content_head_folge']启动每个使用的X路径。


List<WebElement> fullNames   = driver.findElements(By.xpath("//div[@id='content_head_folge']/h1"));
List<WebElement> professions = driver.findElements(By.xpath("//div[@id='content_head_folge']/p"));
List<WebElement> streets     = driver.findElements(By.xpath("//div[@id='content_head_folge']/p/br[1]"));

//2811 results
for (int i = 0; i < 2811; i++)
    resultList.add(new Person(fullNames.get(i).getText(), professions.get(i).getText(), streets.get(i).getText(), null, null, null, null, null));