Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

277
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda