Estoy tratando de usar titiritero para obtener el contenido de propiedad de un elemento, editarlo y ejecutar la versión editada. Por ejemplo: Existe este elemento:
<a href="#" onclick="mojarra.jsfcljs(document.getElementById('j_idt58'),{'j_idt58:j_idt201:0:j_idt203':'j_idt58:j_idt201:0:j_idt203'},'_blank');return false" class="btn btn-info"></a>
Lo que necesito es obtener el contenido onclick, eliminar el parámetro _blank y ejecutar el resto de la función... ¿Alguna idea?
tal vez no sea la solución más poderosa que existe, pero si solo necesita hacer esto en esta etiqueta específica, puede configurar el atributo onclick
con JavaScript dentro de page.evalauate
de esta manera:
await page.evalauate(() => { document .querySelector(".btn.btn-info") .setAttribute( "onclick", document .querySelector(".btn.btn-info") .onclick.toString() .split("\n")[1] .replace(",'_blank'", "") ); }); await page.click(".btn.btn-info");
¿Que está pasando aqui?
page.evaluate
document.querySelector
onclick
(¡no su propiedad!)onclick
como cadena: mojarra.jsfcljs(document.getElementById('j_idt58'),{'j_idt58:j_idt201:0:j_idt203':'j_idt58:j_idt201:0:j_idt203'},'_blank');return false
'function onclick(event) {'
cuando la reasignamos como el atributo),'_blank'
de la función original (cadena). mojarra.jsfcljs(document.getElementById('j_idt58'),{'j_idt58:j_idt201:0:j_idt203':'j_idt58:j_idt201:0:j_idt203'});return false
page.click
ejecuta la nueva función alternativamente, puede usar attributes.onclick.nodeValue
si no se siente cómodo con toString().split("\n")[1]
arriba:
document.querySelector(".btn.btn-info").attributes.onclick.nodeValue.replace(",'_blank'", "")