Digamos que tengo una lista ordenada como esta:
<div> <ol> <li> <a href="#" class="title_and_count"> <span> Item 1 </span> <span class="small_number_block">9</span> </a> </li> <li> <a href="#" class="title_and_count"> <span> Item 2 </span> <span class="small_number_block">11</span> </a> </li> <li class="centerIcon"> <a href="#" class="toggleList"> <span class="arrowUp"> ^ </span> <span class="textOffScreen">Collapse List</span> </a> </li> </ol> </div> Puedo obtener el texto de todo a.title_and_count con page.$$('a.title_and_count) y looping element.evaluate(el => el.innerText) para cada uno.
for(let i = 0; i < itemArray.length; i++){ let itemText = await itemArray[i].evaluate(el => el.innerText); console.log(itemText); } //outputs "Item 1 9" and "Item 2 11" Pero quiero poder obtener ambos valores de intervalo en 2 variables diferentes, itemName y itemCount . ¿Cómo haría para hacer esto? Aparentemente itemArray[i] > span.small_number_block y a.title_and_count > span:nth-child(2) no son selectores válidos para page.$$(selector) . Quiero que la salida sea más como esta, donde los valores están en dos variables diferentes:
Item Name: Item 1 Item Count: 9 Item Name: Item 2 Item Count: 11Gracias por adelantado.
Prueba esto:
for(const item of itemArray){ const [itemName, itemCount] = await item.evaluate( el => Array.from(el.querySelectorAll('span'), span => span.innerText) ); console.log(`Item Name: ${itemName}\nItem Count: ${itemCount}`); }