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

280
Vistas
No se pueden iniciar los controladores de selenio mientras se encuentra en el proceso de renderizado de Electron

Hace meses, construí una aplicación de electrones que extrae datos de una página web usando selenio y luego los visualiza dentro de la página web de electrones y todo funcionó bien. Después de unos meses de no usarlo, tengo problemas debido a muchos cambios importantes dentro de los mismos electrones y selenio. El principal cambio importante es que ya no es posible iniciar los controladores web de selenio desde el proceso de representación, pero solo puedo iniciarlo en el proceso principal.

Esto a continuación es un ejemplo mínimo que no funciona de lo que estoy tratando de hacer:

 // index.js - entry point of the program const electron = require("electron"); let app = electron.app let mainWin; app.on('ready', () => { mainWin = new electron.BrowserWindow({ width: 100, height: 100, frame: true, backgroundColor: '#222222', webPreferences: { nodeIntegration: true, contextIsolation: false }, }); mainWin.loadFile('./home.html'); mainWin.on('closed', function () { console.log('byebye') }); });
 // home.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> hello </body> <script type="text/javascript">require('./home.js')</script> </html>
 //home.js - script file for the home.html launched in the main process const { Builder, By } = require('selenium-webdriver'); process.env.PATH += `${__dirname};`; (async () => { let driver = await new Builder().forBrowser('chrome').build(); await driver.get('https://www.google.com'); let test = await driver.findElements(By.css('div')) console.log(test) })()

El programa se atasca por completo en la compilación de los controladores web de Chrome. Estoy 100% seguro de que estoy usando la versión correcta de Chromedriver y nunca obtengo un error o algo útil, solo vacío, sin ejecutar nada.

¿Me estoy perdiendo algo (como las banderas de preferencias web para la ventana) o esto es un error de electrones/selenio?

Parece que esto sucede solo cuando estoy usando esto en Linux.

Reconstruir el programa para iniciar los controladores desde el proceso principal significaría reconstruir el programa desde cero, ya que usa diferentes ventanas, etc. el propio objeto controlador.

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

0

Ok, logré hacerlo funcionar en Linux también. La modificación consiste en usar un script de precarga que inicializará la instancia del controlador y luego la pasará al proceso de procesamiento al contaminar el objeto de la ventana (es la forma recomendada, como se muestra aquí https://www.electronjs.org/docs/latest/ tutorial/seguridad#cómo-1 ). De esta forma, es posible obtener una instancia de controlador completamente funcional en el proceso de representación en Linux con selenium y electron.

A continuación se muestran los cambios para que funcione:

 // index.js - entry point of the program const electron = require("electron"); let app = electron.app let mainWin; app.on('ready', () => { mainWin = new electron.BrowserWindow({ width: 100, height: 100, frame: true, backgroundColor: '#222222', webPreferences: { nodeIntegration: true, contextIsolation: false preload: path.join(__dirname,'preload.js') }, }); mainWin.loadFile('./home.html'); mainWin.on('closed', function () { console.log('byebye') }); });
 //preload.js const { Builder, By } = require('selenium-webdriver'); (async () => { let driver = await new Builder().forBrowser('chrome').build(); window.pollutingDriver = driver })()
 //home.js //retrieve the driver in this way const sleep = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)) } var driver = null ; (async () => { while(!driver) { driver = window.pollutingDriver await sleep(500) } //do the main work on the page })()
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