2016-12-15 2 views
0

Этот сайт имеет забавную структуру, на самом деле мне удалось получить то, что я хочу, используя селен, но, повторив второй раз, я не могу получить нужные данные. Вот как это идет: -Невозможно получить информацию о тегах li

первого Попробуйте (правильную информацию): - список банки имени, банковского счет и баланс

второго Попробуйте (неверную информации): - метод банковского перевод, Список банковских карт

Я замечаю, что div смещается в другое положение внезапно. Я использую этот XPath, чтобы извлечь информацию, которую я хочу: -

//div[12]/div[1]/ul[1]/li['.$x.'] 

Теперь я хочу, чтобы извлечь базу на сНу идентификатор, так что я придумал этот XPath: -

//*[@id="idBnk_panel"]//div/ul/following::li 

но он не может работать должным образом, чтобы извлечь нужную мне информацию. Любая идея, как захватить информацию из тегов li на основе этой структуры?

<div id="something_here"> 
    <div> 
     <ul> 
      <li></li> 
      <li></li> 
      <li></li> 
     </ul> 
    </div> 
</div> 
+0

Вы можете протестировать xpath, который, по вашему мнению, является правильным из браузера, прежде чем использовать его в коде. В chrome или firefox откройте консоль и напишите $ x ('// xpath/here'), и она вернет элемент, если путь xpath правильный, который подсвечен, чтобы вы могли знать, является ли он тем, который вам нужен – mosaad

ответ

0

Я понимаю, что вы хотите, чтобы извлечь все 3 <li> данных тегов. Так вот код для этого -

List<WebElement> element = driver.findElements(By.xpath("//div[@id='something_here']/div/ul/li")); 
    for(WebElement iterate:element) 
    { 
     System.out.println(iterate.getText()); 
    } 

Здесь я использовал getText() метод, просто получить текст <li> тега. Вы можете управлять своим требованием, что хотите.

0

XPath вы используете неправильный // * [@ ID = "idBnk_panel"] // DIV/мкл/следующий :: Ли

Правильный XPath в соответствии с HTML вы показали это // ДИВ [@ ид = 'something_here']/дел/уль/li [index_number_as_required] или вы можете напрямую использовать // ДИВ [@ ид = 'something_here'] // Ли [index_number_as_required]

, а затем использовать строку text = driver.findElement (By.xpath (// div [@ id = 'something_here'] // li [index_number_as_required])). getText();

0

Если xpath время от времени изменяется из-за некоторого динамического отображения данных, так как доступен «id» div, вы также можете использовать код ниже.

List<WebElement> mainLabels = new ArrayList<WebElement>(); 
mainLabels = driver.findElement(By.id("something_here")).findElements(By.tagName("li")); 
//mainLabels list contains all the li elements 

//Then you can access the texts either this way 
mainLabels.get(0).getText();//This will give you the text that is in first li 
mainLabels.get(1).getText();//This will give you the text that is in second li 

//OR this way 
for (int i = 0; i < mainLabels.size(); i++) { 
    System.out.println(mainLabels.get(i).getText()); 
}