pythonselenium-webdriverselenium-chromedriver

Python and Selenium web scraping error : OSError: [WinError 193] %1 is not a valid Win32 application


I got the next error in my Python routine: "OSError: [WinError 193] %1 is not a valid Win32 application."

I have the Chrome version installed, Versión 127.0.6533.89 (Build Official) (64 bits)

This is my code:

def start_chrome(ruta_descarga):
    """Inicia Chrome con los parametros indicados y devuelve el Driver"""
    #Intalamos la version de ChromeDriver correspondiente
    ruta = ChromeDriverManager().install()
    #OPCIONES DE CHROME:
    options = Options() #instanciamos las opciones de chrome
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
    options.add_argument(f"user-agent={user_agent}") # define un user agent perzonalizado
    #options.add_argument("--windows-size=1000,1000") # para configurar un alto y ancho de la ventana
    options.add_argument("--start-maximized") #para maximar la ventana de Chrome (solo funciona si no se indica windows size)
    options.add_argument("--disable-web-security") #desahabilita la politica del mismo origen o Same Origine Policy
    options.add_argument("--disable-    ") # para que no cargue las extensiones de Chrome
    options.add_argument("--disable-notifications") # para bloquear notificaciones de Chrome 
    options.add_argument("--ignore-certificate-errors") # Para ignorar el aviso "Su conexion no es segura"
    options.add_argument("--no-sandbox") # deshabilita el modo sanbox, No se sabe para que sirve pero en tutoriales lo utilizan
    options.add_argument("--log-level=3") #para que Chromedriver no muestre nada en la terminal 
    options.add_argument("--allow-running-insecure-content") # desactiva el aviso de "contenido no seguro"
    options.add_argument("--no-default-browser-check") # Evita el aviso de Chrome no es navegador por defecto
    options.add_argument("--no-first-run") # evita le ejecucion de ciertas tareas que se realizan la primera vez que se ejecuta Chrome
    options.add_argument("--no-proxy-server") # para no usar el proxy, sino conexiones directas
    options.add_argument("--disable-blink-features=AutomationControlled") # evita que selenium sea detectados por sistemas anti bots
    options.add_argument("--user-data-dir=C:/Users/Probook/AppData/Local/Google/Chrome/User Data/Profile 1")
    #PARAMETROS A OMIITR EN EL INICIO DE CHROMEDRIVE
    exp_opt = [
        'enable-automation', #para que no muestre la notificacion de "Un software automatizado de pruebas está controlado Chrome"
        'ignore-certificate-errors', # para ignorar errores de cerficados (a veces estan caducados)
        'enable-logging' # para que no se muestre en la terminal "DevTools listening on..."
        ]
    options.add_experimental_option("excludeSwitches", exp_opt)

    #PARAMETROS QUE DEFINEN LAS PREFERENCIAS EN CHROMEDRIVER
    prefs = {
        "profile.default_content_setting_values.notifications" : 2, # notificaciones: 0=preguntar | 1:permitir | 2:no permitir
        "intl.accept_languages"                                : ["es-ES","es"], # para definir el idioma del navegador
        "credentials_enable_service"                           : False, # para evitar que Chrome pregunte si queremos guardar la contresaña al loguearnos
        "download.default_directory"                           : f"{ruta_descarga}"
        }
    options.add_experimental_option("prefs", prefs)
    #instancia el servicio de chromedriver
    s = Service(ruta) 
    #instanciamos webdriver de selenium con Chrome
    driver = webdriver.Chrome(service=s, options=options) #se añade el argmento OPTIONS
    #devolvemos el driver
    return driver

This is the error:

Traceback (most recent call last):
  File "G:\Mi unidad\Declaraciones\Programas\descarga_exogena.py", line 596, in <module>
    desca_archivo_dian(ruta_proyecto,rango,year_consulta)
  File "G:\Mi unidad\Declaraciones\Programas\descarga_exogena.py", line 455, in desca_archivo_dian
    driver = start_chrome(ruta_folder_name)
  File "G:\Mi unidad\Declaraciones\Programas\descarga_exogena.py", line 429, in start_chrome
    driver = webdriver.Chrome(service=s, options=options) #se añade el argmento OPTIONS
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 45, in __init__
    super().__init__(
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 55, in __init__
    self.service.start()
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 98, in start   
    self._start_process(self._path)
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 208, in _start_process
    self.process = subprocess.Popen(
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\Probook\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1420, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 no es una aplicación Win32 válida

I tried deleting the chromedriver in the folder path : "C:\Users\myuser.wdm\drivers\chromedriver\win64". But it didn't work.


Solution

  • There seems to be problem wih executable file (Chrome Driver). Might be driver be driver got outdate when your Operating Sytem upgraded it. Here are few suggestions to resolve this

    1. Try to use Self Upgrading Web Driver Manager (So you can avoid getting problem).

    2. Use webdriver_manager package ChromeDriverManager that will will help you install the correct driver automatically.

    3. Here is code snippet.

      ChromeDriverManager().install()