Получить данные без идентификаторов

1

Для описательного статистического анализа мне нужно захватить данные веб-страницей.

Одна запись выглядит так:

<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 ошибочен, но я изо всех сил стараюсь получить нужные поля, когда у меня нет идентификаторов.

Любые рекомендации по получению этих трех полей?

Я ценю ваш ответ!

Теги:
xpath
selenium
selenium-webdriver

1 ответ

1
Лучший ответ

Вероятно, у вас есть несколько элементов <p> до того, к которому вы пытаетесь получить доступ.

Все элементы, которые вы действительно хотите получить, находятся под <div id="content_head_folge">.

Поэтому вы должны запустить каждый из Xpath, который вы используете с //div[@id='content_head_folge'].


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));                   
  • 0
    Спасибо за ваш ответ! Не могли бы вы показать мне на примере, как получить улицу. Я не понимаю, как идти глубже.
  • 1
    street = driver.findElement(By.xpath("//div[@id='content_head_folge']/p/br[1]"));
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню