Python+Selenium爬取报错:OSError: [WinError 193] 无效Win32应用
解决OSError: [WinError 193] %1 不是有效的Win32应用程序错误
问题背景
在Python爬虫程序中启动Chrome时遇到以下错误:OSError: [WinError 193] %1 不是有效的Win32应用程序
已安装64位Chrome浏览器,版本为127.0.6533.89。
启动Chrome的代码
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
报错信息
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
已尝试的操作
删除了C:\Users\myuser.wdm\drivers\chromedriver\win64路径下的chromedriver文件,但问题仍未解决。
解决方案建议
- 修复无效启动参数:代码中存在一行无效参数
options.add_argument("--disable- "),这会导致Chrome启动异常,建议修改为--disable-extensions或直接删除该行。 - 确认ChromeDriver版本匹配:尽管使用了ChromeDriverManager,仍可能出现版本不匹配或下载错误。手动确认Chrome版本对应的ChromeDriver版本,下载64位版本后替换到
.wdm目录中。 - 检查Python位数:确保安装的Python是64位版本,32位Python无法正确调用64位的ChromeDriver,会触发该错误。
- 清理完整缓存:除了删除win64目录下的文件,清空整个
C:\Users\myuser\.wdm目录,让ChromeDriverManager重新下载驱动。 - 排除用户数据目录问题:临时注释掉
--user-data-dir参数,测试是否能正常启动Chrome,排查配置文件权限或损坏的问题。
内容的提问来源于stack exchange,提问作者Ruben Guevara
相关产品推荐
相关产品推荐

