¿Cómo puedo hacer que Selenium / Python espere a que el usuario inicie sesión antes de continuar ejecutando?

Estoy intentando ejecutar un script en Selenium / Python que requiere inicios de sesión en diferentes puntos antes de que se pueda ejecutar el rest del script. ¿Hay alguna forma de que le pida al guión que haga una pausa y espere en la pantalla de inicio de sesión para que el usuario ingrese manualmente un nombre de usuario y contraseña (tal vez algo que espere a que el título de la página cambie antes de continuar con el guión)

Este es mi código hasta ahora:

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.keys import Keys import unittest, time, re, getpass driver = webdriver.Firefox() driver.get("https://www.facebook.com/") someVariable = getpass.getpass("Press Enter after You are done logging in") driver.find_element_by_xpath('//*[@id="profile_pic_welcome_688052538"]').click() 

Utilice WebDriverWait . Por ejemplo, esto realiza una búsqueda en google y luego espera a que un elemento determinado esté presente antes de imprimir el resultado:

 import contextlib import selenium.webdriver as webdriver import selenium.webdriver.support.ui as ui with contextlib.closing(webdriver.Firefox()) as driver: driver.get('http://www.google.com') wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds inputElement = driver.find_element_by_name('q') inputElement.send_keys('python') inputElement.submit() results = wait.until(lambda driver: driver.find_elements_by_class_name('g')) for result in results: print(result.text) print('-'*80) 

wait.until devolverá el resultado de la función lambda, o selenium.common.exceptions.TimeoutException si la función lambda continúa devolviendo un valor de Falsey después de 10 segundos.

Puede encontrar un poco más de información sobre WebDriverWait en el libro de Selenium .

 from selenium import webdriver import getpass # < -- IMPORT THIS def loginUser(): # Open your browser, and point it to the login page someVariable = getpass.getpass("Press Enter after You are done logging in") #< THIS IS THE SECOND PART #Here is where you put the rest of the code you want to execute 

ENTONCES, cuando quiera ejecutar el script, escriba loginUser() y hará su trabajo.

esto funciona porque getpass.getpass() funciona exactamente como input() , excepto que no muestra ninguna característica (es para aceptar contraseñas y no mostrarlas a todos los que miran la pantalla)

Entonces lo que pasa es que tu página se carga. luego todo se detiene, su usuario inicia sesión manualmente y luego vuelve a la CLI de python y pulsa enter.