为了进行描述性统计分析,我需要在网页上获取数据。

一条记录如下所示:

<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=, ...

如您所见,只有第一个字段总是给我相同的文本,其他两个字段给我返回“”。

我认为我的xpath是错误的,但是当我没有标识符时,我正在努力获取所需字段。

有什么建议如何获得这三个领域的?

感谢您的回答!

最佳答案

您可能要尝试访问的元素之前有几个<p>元素。

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

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



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));

10-05 23:03
查看更多