es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python selenium no hace clic en el botón de aceptar cookies.

Quiero acceder a un sitio web, pero simplemente no puedo hacer que desaparezca la ventana emergente de cookies. El sitio web en sí se abre, pero no puedo agarrar el botón de aceptación de la cookie. Aquí está mi código hasta ahora:

#establecer el camino, abrir firefox
path = r'C:\Users\Anwender\Downloads\geckodriver-v0.30.0-win64\geckodriver.exe'
driver = webdriver.Firefox(executable_path=path)

#abrir el foro de bym
driver.get('https://www.bym.de/forum/')

#tratar con el molesto mensaje de cookies
espera = WebDriverWait(driver,15)
espera.until(EC.presence_of_element_located((By.XPATH, '/html/body/div[4]/div[2]/div/div/div/div/div/div/div[2]/div[2]/button[2]/span'))).click()

#iniciar sesión
nombre_usuario = driver.find_element_by_id("navbar_username")
contraseña = driver.find_element_by_id("navbar_password")
nombre_usuario.send_keys("mi_nombre_de_usuario")
contraseña.send_keys("mi_contraseña")
driver.find_element_by_xpath("/html/body/div[1]/div[2]/main/div[3]/div[1]/ul/li[2]/form/fieldset/div/div/input[4]").click()

Incluí el código de inicio de sesión para mencionar que he utilizado la misma sintaxis exacta para iniciar sesión en otro sitio web, por lo que no estoy seguro de cómo superar esto. El código HTML del botón de cookies “aceptar” (aquí: “Zustimmung”) es:

<button title="Zustimmen" class="message-component message-button no-children focusable button global-font-headline sp_choice_type_11 last-focusable-el" style="padding: 14px 40px 12px; margin: 12px 0px; border-width: 1px; border-color: rgb(102, 102, 102); border-radius: 20px; border-style: solid; font-size: 12px; font-weight: 700; color: rgb(17, 17, 17); font-family: georgia, serif; width: calc(100% - 80px); background: rgb(255, 255, 255) none repeat scroll 0% 0%;">Zustimmen</button>

He intentado agarrar el botón por camino CSS o por nombre también, pero simplemente no tengo idea de por qué no funciona. :/

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que ya estás utilizando WebDriverWait para esperar la presencia del botón de aceptación de cookies. Una cosa que puedes intentar es cambiar la estrategia de búsqueda del botón de aceptación de XPATH a CSS_SELECTOR o NAME. Por ejemplo:

    # Encuentra el botón de aceptación de cookies de la ventana emergente de cookies mediante CSS_SELECTOR
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.message-component.message-button.no-children.focusable.button.global-font-headline.sp_choice_type_11.last-focusable-el'))).click()
    
    # Encuentra el botón de aceptación de cookies de la ventana emergente de cookies mediante NAME
    wait.until(EC.element_to_be_clickable((By.NAME, 'sp_message_button11'))).click()
    

    También puedes intentar esperar a que el mensaje emergente de cookies desaparezca antes de iniciar sesión esperando a que el elemento sea invisible o ya no esté presente:

    # Espera a que la ventana emergente de cookies desaparezca
    wait.until(EC.invisibility_of_element_located((By.XPATH, '/html/body/div[4]/div[2]/div/div/div/div/div/div/div[2]/div[2]/button[2]/span')))
    
    # O espera a que la ventana emergente de cookies no esté presente
    wait.until(EC.staleness_of(driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/div/div/div/div/div/div[2]/div[2]/button[2]/span'))) 
    

    Si ninguna de estas soluciones funciona, también puedes intentar interactuar con la ventana emergente usando JavaScript. Aquí tienes un ejemplo de cómo hacer clic en el botón usando JavaScript:

    button = driver.find_element_by_xpath('/html/body/div[4]/div[2]/div/div/div/div/div/div/div[2]/div[2]/button[2]/span')
    driver.execute_script('arguments[0].click();', button)
    

    ¡Espero que esto ayude! ¡Buena suerte!

Comments are closed.