Estoy trabajando con titiritero. Tengo una tabla como en la captura de pantalla. Necesito poder hacer clic en el botón debajo de la acción en una fila después de seleccionar la fila según la columna de nombre a la izquierda.
Basado en selector html usando predicado de predicado
Tengo:
const parent = await page.$eval('td[title="18to22"]', el => el?.parentElement?.outerHTML)Esto funciona y proporciona el html para el elemento principal, pero quiero obtener el identificador del elemento principal ( https://puppeteer.github.io/puppeteer/docs/next/puppeteer.elementhandle/ ) y luego el último identificador del elemento secundario que debe contener el botón de vista en el que se puede hacer clic.
Lo intenté:
const parent = await targetPage.$$eval( 'td[title="18to22"]', (el) => el?.parentElement );Esto produce indefinido.
¿Cómo puedo obtener el control del elemento principal y, en última instancia, del elemento secundario?
Creo que no puede volver a convertir el elemento ya evaluado a ElementHandle.
Haría lo siguiente para lograr lo que necesitas:
page.$$eval (devuelve una matriz de cadenas)Array.findIndex()nth-child() de CSS usa números que comienzan desde 1, y no desde 0 como las matrices JS regulares)tbody > tr:nth-child(${wantedRowIndex + 1})> td:nth-child(5)<a> , por lo que puede agregar > a a al final del selector para apuntar al enlace en el que desea hacer clicHTMLElement.click() en la función de página de page.$evalEjemplo:
const rows = await page.$$eval('tbody > tr', elems => elems.map(el => el.innerText)) const wantedRowIndex = rows.findIndex(el => el.includes('18to22')) await page.$eval(`tbody > tr:nth-child(${wantedRowIndex + 1}) > td:nth-child(5) > a`, el => el.click())