Заповніть ім’я користувача та пароль, використовуючи селен у python


80

Як я можу автоматично заповнити ім’я користувача та пароль за посиланням нижче:

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')

Після цього я справді не знаю:

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")

Відповіді:


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()

Примітки до вашого коду:


3
Гей, ти знаєш, як читати вміст сторінки, яка завантажується після подання форми? Я пишу тест для веб-сайту, і мені вдалося подати форму, і зараз я загубився. Іншими словами, я хочу отримати вміст обмеженої цільової сторінки лише для учасників.
Ніно Шкопак

3
@ NinoŠkopac Об'єкт "селен" працює як браузер. Після того, як ви натиснете кнопку, вона завантажує нову цільову сторінку, тож ви можете зробити 'selenium.find_element_by_id ("будь-що")'. Прочитайте також про "selenium.implicitly_wait ()", щоб зачекати між завантаженнями сторінки.
xbello

2
Зверніть увагу, що у наведеній вище відповіді селен повинен бути отриманим дескриптором драйвера, наприклад, selenium = webdriver.Firefox ()
Ю. Шень

@xbello Щиро дякую!
Сохан Дас,

28

Використовуйте WebElement.send_keysметод для імітації набору клавіш.

nameу коді ( Username, Password) не відповідає фактичним nameелементам ( 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()

Коли я спробую це, я отримую таку помилку: об'єкт 'StatefulBrowser' не має атрибута 'find_element_by_name'
Ана Клаудія

2
@AnaClaudia, можливо, API змінився з моменту розміщення цієї відповіді. Будь ласка, перевірте документацію.
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()

Примітка:

  • ми використовуємо user.clear()для того, щоб очистити поле введення.
  • для пошуку кнопки подати ви можете використовувати будь-який інший метод, заснований на вихідному коді сторінки. для отримання інформації див. розміщення елементів

4

У деяких випадках, коли елемент не взаємодіючий, sendKeys()не працює, і ви, ймовірно, зіткнетеся з ElementNotInteractableException.

У таких випадках ви можете вибрати виконати javascript, який задає значення, а потім відправити назад.

Приклад:

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)

Довідково:

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


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()

0

Я новачок у селені, і я спробував усі рішення вище, але вони не працюють. Нарешті, я спробував це вручну

driver = webdriver.Firefox()
import time

driver.get(url)

time.sleep(20)

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

Тоді я міг отримати вміст з Інтернету.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.