Estoy tratando de configurar un bot que haga clic en un botón en una página web para un proyecto. Ahora bien, esto funciona bien en otras páginas web, sin embargo, en la página en la que quiero usarlo, los desarrolladores aparentemente pensaron que sería una idea brillante tener casi ninguna identificación. Así que estoy atascado tratando de averiguar cómo seleccionar un div por su clase (el único selector disponible que tiene). Sí, he intentado usar Xpath: ambas veces devuelven un valor nulo o un error. Aquí está el código de trabajo si está en otra página web:
const puppeteer = require('puppeteer'); async function scrapeProduct(url) { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url); await page.click('#someid'); await page.screenshot({ path: "success.png", fullPage: true }); await browser.close(); } scrapeProduct('someurl');Este soy yo probando Xpath que funciona, pero nuevamente esto no funciona para lo que quiero hacer (no estoy seguro de si esta es la forma correcta de todos modos, parece algo indirecto y no sé cómo harías clic con esto):
async function scrapeProduct(url) { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url); const [el] = await page.$x('//*[@id="btt-btn"]'); const classID = await el.getProperty('textContent'); const classIDText = await classID.jsonValue(); console.log(classIDText); await page.screenshot({ path: "success.png", fullPage: true }); await browser.close(); } scrapeProduct('someurl');El error que recibo habla de que no se encontró ningún nodo con ese selector, que en este caso es '.DropdownSelectInput__SelectBoxText-sc-1ssquc7-0 bnoarO'
¿Alguien tiene alguna idea? He probado varios selectores y métodos diferentes y no puedo averiguar cómo podría hacer esto.
Tuve el problema similar antes. La mejor manera de seleccionar su div es la siguiente:
En el mismo árbol HTML, seleccione un elemento con un determinado atributo. Puede ser un nombre de atributo como data-at o id o cualquier cosa que no cambie en cada carga. Una vez que logre seleccionar ese elemento, puede subir y bajar en el árbol con element.parentNode o node.lastChild o node.firstChild, etc. Esta sería la única forma de hacerlo. Posiblemente el sitio web que está tratando de manipular usa algo que genera clases. Entonces, ningún ser humano le dio esos nombres de clase.