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

462
Vistas
¿Cómo hago que el titiritero seleccione el cuadro de texto del traductor de Google para mí? solo funciona si hago clic yo mismo

mi codigo es el siguiente

 await page.waitForTimeout(1000); await page.waitForSelector( "#yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb.EjH7wc > div.AxqVh > div.OPPzxe > c-wiz.rm1UF.UnxENd.u3bW4e > span > span > div > textarea" ); let sourceString = "ni hao ma"; await page.type( "#yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb.EjH7wc > div.AxqVh > div.OPPzxe > c-wiz.rm1UF.UnxENd.u3bW4e > span > span > div > textarea", sourceString ); await page.waitForTimeout(5000); await page.waitForSelector( "#yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb.EjH7wc > div.AxqVh > div.OPPzxe > c-wiz.P6w8m > div.tm8pq" ); const [val1] = await page.$x( '//*[@id="yDmH0d"]/c-wiz/div/div[2]/c-wiz/div[2]/c-wiz/div[1]/div[2]/div[3]/c-wiz[2]/div[7]/div/div[1]/span[1]/span/span' ); const txtval1 = await val1.getProperty("textContent"); const rawtxtval1 = await txtval1.jsonValue(); console.log(rattxtval1);

este código abre Google Translate, escribe algún texto, en este caso "ni hao ma" y devuelve la traducción del mismo. Todo esto funciona perfectamente, pero solo si hago clic en el primer cuadro yo mismo. Por alguna razón, no puedo hacer que ingrese el texto sin hacer clic en el cuadro. Intenté llamar a page.click() en el cuadro con la misma etiqueta, y dice que el nodo no existe como se muestra en el siguiente error

 Error: No node found for selector: #yDmH0d > c-wiz > div > div.WFnNle > c-wiz > div.OlSOob > c-wiz > div.ccvoYb.EjH7wc > div.AxqVh > div.OPPzxe > c-wiz.rm1UF.UnxENd.u3bW4e > span > span > div > textarea

sin embargo, cuando hago clic en él mismo mientras se ejecuta el programa, luego escribe en el cuadro perfectamente (usando exactamente la misma etiqueta para encontrar en qué cuadro escribir) y recupera el texto en el otro cuadro también.

¿Estoy usando la función incorrecta o me estoy perdiendo por completo un paso de lo que está pasando?

Cualquier ayuda muy apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Este enfoque parece demasiado complicado. En primer lugar, por lo general se deben evitar los selectores hiperespecíficos generados por el navegador. Es demasiado fácil para JS deslizar un nuevo elemento en la cadena inesperadamente o cambiar una sola clase o identificación y todo se desmorona.

En segundo lugar, waitForTimeout es casi siempre un enfoque deficiente, como advierte el archivo Léame de Puppeteer. Apéguese a una estrategia basada en eventos usando waitForSelector y waitForFunction tanto como sea posible para evitar condiciones de carrera y secuencias de comandos lentas.

 const puppeteer = require("puppeteer"); // ^13.5.1 let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); await page.goto("https://translate.google.com"); await page.type(".er8xn", "ni hao ma"); await page.waitForSelector(".Q4iAWc"); const phrases = await page.$$eval(".Q4iAWc", els => els.map(e => e.textContent)); console.log(phrases.join(" ")); // => How are you })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;

Esto se puede optimizar aún más navegando directamente a https://translate.google.com/?sl=auto&tl=en&text=ni%20hao%20ma&op=translate para evitar seleccionar y manipular el área de texto por completo. La navegación directa es más rápida y robusta, ya que no necesita conectarse a ninguna clase o ID de DOM. Solo tenga cuidado de codificar su cadena de consulta correctamente.

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