Complete el nombre de usuario y la contraseña usando selenio en python

80

¿Cómo puedo completar automáticamente el nombre de usuario y la contraseña en el siguiente enlace?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = 'C:\\chromedriver.exe'
browser = webdriver.Chrome(chromedriver)
browser.get('http://www.example.com')

Después de eso, realmente no lo sé:

username = Select(browser.find_element_by_name('Username'))
password = Select(browser.find_element_by_name('Password'))
username.select_by_visible_text("text")
password.select_by_visible_text("text")
2964502
fuente

Respuestas:

115
driver = webdriver.Firefox(...)  # Or Chrome(), or Ie(), or Opera()

username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")

username.send_keys("YourUsername")
password.send_keys("Pa55worD")

driver.find_element_by_name("submit").click()

Notas para su código:

xbello
fuente
3
Oye, ¿sabes cómo leer el contenido de la página que se carga después de enviar el formulario? Estoy escribiendo una prueba para un sitio web, logré enviar el formulario y ahora estoy perdido. En otras palabras, quiero obtener el contenido de la página de destino restringida solo para miembros.
Nino Škopac
3
@ NinoŠkopac El objeto "selenium" funciona como un navegador. Una vez que hace "clic", se carga la nueva página de destino, por lo que puede hacer 'selenium.find_element_by_id ("lo que sea")'. Lea también sobre "selenium.implicitly_wait ()" para esperar entre cargas de página.
xbello
2
Tenga en cuenta que, en la respuesta anterior, selenium debe ser el identificador del controlador obtenido, por ejemplo, selenium = webdriver.Firefox ()
Yu Shen
@xbello ¡Muchas gracias!
Sohan Das
28

Utilice el WebElement.send_keysmétodo para simular la escritura de teclas.

nameen el código ( Username, Password) no coincide con el actual namede los elementos ( username, password).


username = browser.find_element_by_name('username')
username.send_keys('user1')

password = browser.find_element_by_name('password')
password.send_keys('secret')

form = browser.find_element_by_id('loginForm')
form.submit()

# OR  browser.find_element_by_id('submit').click()
falsetru
fuente
Cuando intento esto, aparece este error: el objeto 'StatefulBrowser' no tiene atributo 'find_element_by_name'
Ana Claudia
2
@AnaClaudia, es posible que la API haya cambiado desde que publiqué esta respuesta. Consulte la documentación.
falsetru
9
user = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")
user.clear()
user.send_keys("your_user_name")
password.clear()
password.send_keys("your_password")
driver.find_element_by_name("submit").click()

Nota:

  • que usamos user.clear()para borrar el campo de entrada.
  • para localizar el botón de envío, puede utilizar cualquier otro método basado en el código fuente de la página. para obtener información, consulte la ubicación de elementos
Anant Singh
fuente
4

En algunos casos, cuando el elemento no se puede interactuar, sendKeys()no funciona y es probable que encuentre un archivo ElementNotInteractableException.

En tales casos, puede optar por ejecutar javascript que establece los valores y luego puede publicar.

Ejemplo:

url = 'https://www.your_url.com/'

driver = Chrome(executable_path="./chromedriver")
driver.get(url)

username = 'your_username'
password = 'your_password'

#Setting the value of email input field
driver.execute_script(f'var element = document.getElementById("email"); element.value = "{username}";')

#Setting the value of password input field
driver.execute_script(f'var element = document.getElementById("password"); element.value = "{password}";')

#Submitting the form or click the login button also
driver.execute_script(f'document.getElementsByClassName("login_form")[0].submit();')

print(driver.page_source)

Referencia:

https://www.quora.com/How-do-I-resolve-the-ElementNotInteractableException-in-Selenium-WebDriver

Rithin Chalumuri
fuente
0
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait

# If you want to open Chrome
driver = webdriver.Chrome()
# If you want to open Firefox
driver = webdriver.Firefox()

username = driver.find_element_by_id("username")
password = driver.find_element_by_id("password")
username.send_keys("YourUsername")
password.send_keys("YourPassword")
driver.find_element_by_id("submit_btn").click()
Plabon Dutta
fuente
0

Soy nuevo en el selenio y probé todas las soluciones anteriores pero no funcionan. Finalmente, probé esto manualmente por

driver = webdriver.Firefox()
import time

driver.get(url)

time.sleep(20)

print (driver.page_source.encode("utf-8"))

Entonces podría obtener contenidos de la web.

usuario10070370
fuente