¿Existe una condición que puedo configurar para romper el bucle cuando llegue a la siguiente categoría? Me preguntaba cuál es el método equivalente para xpath a jquery nextHasta
<div class="category">Category one</div> <div>category item 1</div> <div>category item 2</div> <div>category item 3</div> <div class="category">Category two</div> <div>category item 1</div> <div>category item 2</div> <div>category item 3</div> <div>category item 4</div>necesito xpath que seleccionará elementos después de la categoría uno hasta la categoría dos, y de la categoría dos a la categoría n
driver.find_elements_by_xpath('.//div[@class="category"]')[0].find_element_by_xpath('.//following::div')Esta es la implementación manual de su solicitud, lea los comentarios en línea. Obviamente, esta es una de las múltiples formas de hacer lo que necesita.
// Custom function to select FROM TO category const selectFromTo = (from, to) => { // Select all divs const divs = document.getElementsByTagName("div"); // Loop divs const result = []; let counter = 0; for(const div of divs) { // If there is classname "category" do count if(div.className === "category") counter++; // Check from/to number and push to results else if(counter >= from && counter < to) result.push(div); } // Return result return result; } // Select range // First digit is start category, // second is TILL this category number const test = selectFromTo(2, 4); // View selected console.log(test); <div class="category">Category one</div> <div>category item1 1</div> <div>category item1 2</div> <div>category item1 3</div> <div class="category">Category two</div> <div>category item2 1</div> <div>category item2 2</div> <div>category item2 3</div> <div>category item2 4</div> <div class="category">Category three</div> <div>category item3 1</div> <div>category item3 2</div> <div>category item3 3</div> <div>category item3 4</div> <div class="category">Category four</div> <div>category item4 1</div> <div>category item4 2</div> <div>category item4 3</div> <div>category item4 4</div> <div class="category">Category five</div> <div>category item5 1</div> <div>category item5 2</div> <div>category item5 3</div> <div>category item5 4</div>En su caso, agruparía todos los elementos de la categoría en un nuevo div principal y luego los revisaría.
Ejemplo:
<div class="category">Category one</div> <div id="category-1"> <div>category item 1</div> <div>category item 2</div> <div>category item 3</div> </div> <div class="category">Category two</div> <div id="category-2"> <div>category item 1</div> <div>category item 2</div> <div>category item 3</div> <div>category item 4</div> </div>EDITAR: si no puede cambiar la estructura HTML (acabo de ver la etiqueta Selenium, así que supongo que es posible que no pueda), el método más fácil sería iterar a través de los elementos HTML y hacerlo sin XPath . XPath no está hecho para lo que intenta lograr.
Pseudocódigo:
categories = [] current_category = [] for element in elements: if element.class is "category": if len(current_category) != 0: categories.append(current_category) current_category = [] else: current_category.append(element)