2016-01-30 3 views
2

Я пишу скрипт в node.js для селена, который перейдет на страницу и захватит innerhtml определенного класса css и сохранит их в массиве.получить массив элементов из findElement (By.className())

var element = driver.findElement(By.className("hll")); 
element.getInnerHtml().then(html){ 
    //returns 1 of the elements html where I want multiples 
} 
+0

Извините. Не могли бы вы прояснить, каков ваш вопрос? Если вы найдете несколько элементов, начните с множественного числа ['.findElements()'] (http://seleniumhq.github.io/selenium/docs/api/javascript/class_webdriver_WebDriver.html#findElements). –

+0

Я только начал изучать селен прошлой ночью, так что извиняюсь. Если я запустил: var element = driver.findElements (By.className ("hll")); как я могу получить innerhtml каждого индекса –

ответ

3

Чтобы получить HTML нескольких элементов, вы можете использовать driver.findElements() найти все совпадения элементов. Это предоставит Promise, который решает с элементами в Array.

var pendingElements = driver.findElements(By.className('h11')) 

pendingElements.then(function (elements) { 
    // ... 
}); 

Вам необходимо выполнить итерацию по коллекции и запросить HTML-код каждого элемента. Вы можете использовать Array «s .map() создать коллекцию обещаний от getInnerHtml():

var pendingHtml = elements.map(function (elem) { 
    return elem.getInnerHtml(); 
}); 

Ждать, чтобы они были решены, вы можете передать коллекцию promise.all().

promise.all(pendingHtml).then(function (allHtml) { 
    // ... 
}); 

Примечание, вам нужна ссылка на Selenium, promise для этого.

var promise = require('selenium-webdriver').promise; 

Комбинированный:

// ... 

var promise = require('selenium-webdriver').promise; 

var pendingElements = driver.findElements(By.className('h11')) 

pendingElements.then(function (elements) { 
    var pendingHtml = elements.map(function (elem) { 
     return elem.getInnerHtml(); 
    }); 

    promise.all(pendingHtml).then(function (allHtml) { 
     // `allHtml` will be an `Array` of strings 
    }); 
}); 
+0

Большое спасибо за ответ! Это полностью сработало, но мне пришлось сменить селектор на xpath: xpath ("// * [@ class = 'hll']") –

+0

Можно ли преобразовать div/table в json-формат с помощью кода выше? – VVB

Смежные вопросы