Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

247
Views
Nodo JS Puppeteer haga clic en un elemento li sin nombre o identificación

Estoy tratando de hacer clic en un elemento li que, por alguna razón, funciona como un selector de tamaño en un sitio web determinado. Se parece a esto

seleccionador de tamaño

Y su html se ve así

ingrese la descripción de la imagen aquí

Cada <li> representa una opción de tamaño, probé algunas cosas pero ninguna funciona.

mi primer intento fue usar xpath:

 const [size_button] = await page.$x(`//*[contains(., '${data[ii][1]}')]`); // doesn't work await size_button.click();

También probé una acción de clic normal:

 await page.click(`li[data-original-title="Größe in EU: ${data[ii][1]}"]`); // the array contains a specific size, eg. 40.5 like in the li data-original-title field

Nada de esto funcionó, y me pregunto si es posible hacer clic en ese elemento con titiritero...

Si alguien quisiera examinar la página, el enlace está aquí .

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Esto es un poco complicado. Su selector funciona bien, al igual que el evento de clic, pero sospecho que el evento no hace nada más que llamar a e.preventDefault() para evitar la navegación al href del ancla.

El resaltado que muestra que se seleccionó el tamaño en realidad se aplica mediante un evento mousedown en el <li> principal de <a> , y parece que el evento secundario no se ha aplicado o no burbujea usando su método .click :

imagen que muestra el árbol de elementos de la consola del navegador con el evento mousedown del elemento li en un círculo para indicar que es el evento importante que OP quiere desencadenar

Puede desencadenar esto de la siguiente manera:

 const puppeteer = require("puppeteer"); // ^13.5.1 let browser; (async () => { browser = await puppeteer.launch({headless: false}); const [page] = await browser.pages(); await page.setRequestInterception(true); page.on("request", req => { req.resourceType() === "image" ? req.abort() : req.continue(); }); const url = "https://en.afew-store.com/products/air-jordan-4-retro-tour-yellow-dark-blue-grey-white"; await page.goto(url, {waitUntil: "domcontentloaded"}); const size = "8.5"; const xp = `//a[contains(@class, "btn-sm") and text()="${size}"]`; const sizeButton = await page.waitForXPath(xp); await sizeButton.evaluate(btn => { btn.closest("li").dispatchEvent(new Event("mousedown")); // ^--- .parentNode is also possible instead of .closest("li") }); await page.waitForTimeout(10000); })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;

El tiempo de espera final le da la oportunidad de mirar la página y ver que se resaltó el tamaño 8.5.

Tenga en cuenta que he hecho que su selector xpath sea más preciso para evitar falsos positivos.

about 4 years ago · Juan Pablo Isaza Report

0

En este caso, podría, por ejemplo, obtener etiquetas al <a con class="btn btn-sm"

Creo que es una buena idea obtener el resultado esperado en la consola del navegador usando Vainilla Javascript, y cuando tenga éxito intentar alcanzar el mismo resultado con Puppeteer

  • Vainilla Javascript

     const sizeLinks = document.querySelectorAll('a.btn.btn-sm') sizeLinks[1].click()
  • Titiritero (Ejemplo de trabajo completo)

     'use strict' const puppeteer = require('puppeteer'); (async () => { const baseUrl = 'https://en.afew-store.com/products/air-jordan-4-retro-tour-yellow-dark-blue-grey-white' const browser = await puppeteer.launch({ headless: false }); // default is true const page = await browser.newPage(); await page.goto(baseUrl, { waitUntil: 'networkidle2', }); await page.waitForTimeout(5000) // Leave extra time for complete the page load (Just to be cautious) const sizeLinks = await page.$$('a.btn.btn-sm') await sizeLinks[1].click() console.log('Debugging') //await browser.close(); //console.log(`Browser has been closed`); //process.exit(0); })();
  • Referencia:

JavaScript querySelector() y querySelectorAll()

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!