Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

443
Vistas
Cómo seleccionar elementos del menú desplegable en la página web con Titiritero

Estoy tratando de aprender JavaScript y tratando de seleccionar el menú desplegable Ordenar y hacer clic en uno de sus cuatro elementos en este sitio web: https://www.centris.ca/en/properties~for-sale?view=Thumbnail

Pero sigo no node found for selector .

Este es mi código:

 const puppeteer = require('puppeteer') function run () { return new Promise(async (resolve, reject) => { try { const browser = await puppeteer.launch({headless: false}) const page = await browser.newPage() await page.goto("https://www.centris.ca/") await page.$eval('i.far.fa-search', el => el.click()) await page.select("select#selectSortById", "3") //browser.close() return resolve(page) } catch (e) { return reject(e) } }) } run().then(console.log).catch(console.error)
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El código que está utilizando es para manipular elementos HTML <select> y <option> . Pero la estructura que está viendo son solo algunos <a> s en un <div> que tienen estilo y tienen JS que los hace comportarse como un menú desplegable, pero en realidad no son menús desplegables en lo que respecta a Titiritero, probablemente explicando por qué tu código no funciona.

Simplemente seleccionaría el <a> (actuando como una "opción") que desea, luego haría clic en él ( usando el click nativo para evitar la rareza de la visibilidad ). waitForFunction una función de espera para detectar cuándo se aplicó realmente el filtro, pero es posible que eso no sea lo que quieras hacer a continuación. Aun así, ayuda a verificar que esto funcione antes de descargar la captura de pantalla.

También configuré un agente de usuario para que funcione el modo sin cabeza, si lo desea.

 const puppeteer = require("puppeteer"); // ^13.0.1 let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"); await page.goto("https://www.centris.ca/en/properties~for-sale"); const recent = await page.waitForSelector('#selectSortById [data-option-value="3"]'); await recent.evaluate(el => el.click()); // assume the whole first page are new listings and assume a few classes exist await page.waitForFunction(` document.querySelectorAll(".banner.new-property").length === document.querySelectorAll(".property-thumbnail-item").length `); await page.screenshot({path: "result.png"}); })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;

No está relacionado con la tarea de raspado, pero vale la pena echarle un vistazo para mejorar su código JS: ¿Qué es el antipatrón de construcción de promesa explícita y cómo lo evito?

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda