Для описательного статистического анализа мне нужно захватить данные веб-страницей.
Одна запись выглядит так:
<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">
.
Поэтому вы должны запустить каждый из 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));
street = driver.findElement(By.xpath("//div[@id='content_head_folge']/p/br[1]"));