es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo seleccionar un div en Javascript con solo una clase utilizando Puppeteer?

Estoy intentando 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, al parecer los desarrolladores pensaron que sería una idea brillante tener casi ningún id. 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 devuelve null o un error. Aquí está el código funcionando 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');

Esto es una prueba usando XPath que funciona, pero de nuevo, esto no funciona para lo que quiero hacer (no estoy seguro de si esta es la forma correcta de todos modos, parece indirecto y no sé cómo se hace clic con esto):

const puppeteer = require('puppeteer');

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 obtengo menciona 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 intentado varios selectores y métodos diferentes y no logro averiguar cómo podría hacer esto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar un div por su clase en Puppeteer, puedes usar el método page.$ con un selector CSS que apunte a la clase. Aquí tienes un ejemplo:

    “`const puppeteer = require(‘puppeteer’);

    async function scrapeProduct(url) {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(url);
    await page.$(‘.tu-selector-de-clase’); // reemplaza con tu selector de clase real
    await browser.close();
    }

    scrapeProduct(‘someurl’);“`

    Esto seleccionará el primer elemento en la página que coincida con el selector de clase. Luego puedes llamar a .click() en dicho elemento para simular un clic.

    Si hay múltiples elementos con la misma clase, puedes usar page.$$ para seleccionar todos los elementos coincidentes y luego recorrerlos en un bucle para encontrar el que deseas.

    Usar Xpath es otra opción, pero puede ser más complejo y menos confiable que usar selectores CSS. Si tienes problemas con Xpath, puede que valga la pena intentar con un método de selección diferente.

Comments are closed.