Chrome no usa mi configuración download.default_directory y siempre descarga a mi carpeta de ejecución de Python

2 minutos de lectura

Avatar de usuario de Kwahn
Kwahn

Esto es Chrome 111 en Debian 11. Estoy intentando descargar un archivo en una carpeta. A las 3 a. m. de anoche, estaba funcionando; a las 6 a. m. de esta mañana, sin modificaciones, actualizaciones o reinicios del servidor, no lo estaba. Todos los archivos, cualquier secuencia de comandos de Python que utilice este segmento de código, ahora descargan los archivos en su directorio de ejecución. A continuación se muestra la instanciación del controlador del navegador sin cabeza Chrome Selenium:

def create_temp_folder():
    temp_folder = new_file_folder+directory_separator+(str)(uuid.uuid4())
    os.mkdir(temp_folder)
    return temp_folder


def init_chrome_service(temp_directory = False):
    #init stage, notes for later class construction
    service = Service(executable_path=ChromeDriverManager().install())
    chrome_options = Options()
    if temp_directory:
        download_directory = create_temp_folder()

    chrome_options.add_argument("--disable-web-security")
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--headless")

    prefs = {'download.default_directory' : download_directory} 
    chrome_options.add_experimental_option("detach", True)
    chrome_options.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(options=chrome_options) 
    return driver, download_directory

La variable chrome.default_directory existe, se está configurando, está creando correctamente el directorio, tiene permisos, no ha perdido permisos aleatoriamente y el comportamiento es el mismo ya sea que ejecute el script de Python como sudo, yo mismo o a través de un trabajo cron. He intentado reinstalar Chrome y Chromedriver.

Lo que es aún más extraño es que la misma copia exacta del código en mi computadora con Windows funciona perfectamente, por lo que algo cambió en el entorno Debian, es mi teoría de trabajo, pero por mi vida no puedo aislar qué.

El código que realmente descarga el archivo es trivial: un controlador.get(‘elementid’).haga clic() en un botón que ejecuta un informe.

  • Tuve un problema similar y me interesé por las respuestas. Con respecto a Selenium, terminé descargando el chromium.exe yo mismo. Entonces recomendaría usar playwright lib que usa servidores azure (de alguna manera fui bloqueado de los servidores de google para descargar chromium). playwright.dev/python/docs/intro

    – Je Je

    10 de febrero a las 22:47


El modo sin cabeza comenzó a comportarse de manera diferente hace un par de días. Si actualizó Chrome en su entorno, es posible que tenga una compilación con el problema.

https://bugs.chromium.org/p/chromedriver/issues/detail?id=4357

  • Maldito Google, siempre rompiendo mis cosas bonitas :

    – Kwahn

    13 de febrero a las 15:56

Teniendo el mismo problema, la siguiente sugerencia funcionó: cambiar de options.add_argument(‘–headless’) a options.add_argument(‘–headless=new’).

¿Ha sido útil esta solución?