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