Cómo acceder a la ventana emergente de inicio de sesión en Selenium usando Python

Muchos sitios web utilizan el inicio de sesión a través de las redes sociales para facilitar el proceso de inicio de sesión a los usuarios. En la mayoría de los casos, si se hace clic en el botón, se abre una nueva ventana emergente donde el usuario debe ingresar sus credenciales de usuario. Manualmente, uno puede cambiar de ventana en un navegador e ingresar las credenciales requeridas para iniciar sesión. Pero en caso de acceso web desatendido usando webdriver, el controlador no puede simplemente cambiar de ventana automáticamente. Necesitamos cambiar el identificador de la ventana en el controlador para ingresar las credenciales de inicio de sesión en la ventana emergente. Selenium tiene la función de cambiar la ventana para acceder a varias ventanas usando el mismo controlador.
Primero, tenemos que obtener el identificador de ventana actual de un controlador web, lo que se puede hacer de la siguiente manera: 
 

driver.current_window_handle

Necesitamos guardarlo para obtener el identificador de ventana actual. Después de que aparezca la ventana emergente, debemos obtener la lista de todos los controladores de ventana disponibles en este momento. 
 

driver.window_handles

Luego podemos obtener el identificador de la ventana de la página de inicio de sesión de esta lista y luego cambiar el control. Para cambiar el controlador de la ventana, use: 
 

driver.switch_to.window(login_page)

Después de un inicio de sesión exitoso, podemos usar el mismo método switch_to para cambiar el control a la página anterior. 
Nota: Para ejecutar este código, se requiere la biblioteca de selenium y geckodriver para firefox. La instalación de Selenium se puede realizar mediante el instalador de bibliotecas de terceros de Python, pip. Para instalar selenium ejecuta este comando 
 

pip install selenium

Para geckodriver, descargue el archivo y agregue su ruta a la variable OS PATH, para que pueda activarse desde cualquier lugar del directorio de archivos.
Veamos el código para iniciar sesión en zomato.com usando Facebook.
 

Python3

# import the libs
from selenium import webdriver
from time import sleep
  
# create the initial window
driver = webdriver.Firefox()
  
# go to the home page
driver.get('https://www.zomato.com')
  
# storing the current window handle to get back to dashboard
main_page = driver.current_window_handle
  
# wait for page to load completely
sleep(5)
  
# click on the sign in tab
driver.find_element_by_xpath('//*[@id ="signin-link"]').click()
  
sleep(5)
  
# click to log in using facebook
driver.find_element_by_xpath('//*[@id ="facebook-login-global"]/span').click()
  
# changing the handles to access login page
for handle in driver.window_handles:
    if handle != main_page:
        login_page = handle
          
# change the control to signin page        
driver.switch_to.window(login_page)
  
# user input for email and password
print('Enter email id : ', end ='')
email = input().strip()
print('Enter password : ', end ='')
password = input().strip()
  
# enter the email
driver.find_element_by_xpath('//*[@id ="email"]').send_keys(email)
  
# enter the password
driver.find_element_by_xpath('//*[@id ="pass"]').send_keys(password)
  
# click the login button
driver.find_element_by_xpath('//*[@id ="u_0_0"]').click()
  
  
  
# change control to main page
driver.switch_to.window(main_page)
  
sleep(10)
# print user name 
name = driver.find_element_by_xpath('/html/body/div[4]/div/div[1]/header/div[2]/div/div/div/div/span').text
print('Your user name is : {}'.format(name))
  
# closing the window
driver.quit()

Producción: 
 

Publicación traducida automáticamente

Artículo escrito por Arghyadip_Manna y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *