파이썬에서 셀레늄을 사용하여 사용자 이름과 암호를 입력하십시오.


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
이봐, 당신은 양식을 제출 한 후로드되는 페이지의 내용을 읽는 방법을 알고 있습니까? 웹 사이트에 대한 테스트를 작성 중이고 양식을 제출할 수 있었는데 지금은 길을 잃었습니다. 즉, 제한된 회원 전용 랜딩 페이지의 콘텐츠를 얻고 싶습니다.
Nino Škopac

3
@ NinoŠkopac "selenium"개체는 브라우저처럼 작동합니다. "클릭"하면 새 랜딩 페이지가로드되므로 'selenium.find_element_by_id ( "whatever")'를 수행 할 수 있습니다. 페이지로드 사이에 대기하려면 "selenium.implicitly_wait ()"에 대해서도 읽어보십시오.
xbello

2
참고 위의 대답에, 셀레늄은 드라이버 핸들, 셀레늄 = webdriver.Firefox () 예를 들어, 획득해야한다
유 셴

@xbello 정말 감사합니다!
Sohan Das

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'속성이 없습니다.
Ana Claudia

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

그러면 웹에서 콘텐츠를 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.