본문 바로가기

개발/Python

Selenium Locating Elements

1. 요소 찾기

단일 요소 추출

- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector

 

해당 요소 전체 추출

- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector

 

2. find_element / find_elements

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

3. id로 찾기

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
  </form>
 </body>
<html>
login_form = driver.find_element_by_id('loginForm')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

4. 이름으로 찾기

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>

사용자의 이름 및 비밀번호 요소 찾기

username = driver.find_element_by_name('username')
password = driver.find_element_by_name('password')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

5. XPath로 찾기

XPath는  XML 문서에서 노드를 찾는 데 사용되는 언어입니다.

HTML 은 XML(XHTML)의 구현일 수 있으므로 Selenium 사용자는 웹 응용 프로그램의 요소를 대상으로 찾을 수 있습니다.

XPath는 찾으려는 요소에 적합한 id 또는 name 속성이 없을 경우 주로 사용합니다.

XPath 로케이터를 사용하여 id 및 name 이외의 속성을 통해 요소를 지정할 수도 있습니다.

<html>
 <body>
  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />
   <input name="continue" type="button" value="Clear" />
  </form>
</body>
<html>
login_form = driver.find_element_by_xpath("/html/body/form[1]")
login_form = driver.find_element_by_xpath("//form[1]")
login_form = driver.find_element_by_xpath("//form[@id='loginForm']")

6. 링크 텍스트로 하이퍼 링크 찾기

<html>
 <body>
  <p>Are you sure you want to do this?</p>
  <a href="continue.html">Continue</a>
  <a href="cancel.html">Cancel</a>
</body>
<html>
continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

7. 태그 이름으로 요소 찾기

<html>
 <body>
  <h1>Welcome</h1>
  <p>Site content goes here.</p>
</body>
<html>
heading1 = driver.find_element_by_tag_name('h1')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

8. 클래스 이름으로 요소 찾기

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>
content = driver.find_element_by_class_name('content')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

9. CSS 선택자로 요소 찾기

<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
<html>
content = driver.find_element_by_css_selector('p.content')

해당 id 속성의 요소가 없을 경우 NoSuchElementException 발생

 

# 참고

https://selenium-python.readthedocs.io/locating-elements.html

 

'개발 > Python' 카테고리의 다른 글

FastAPI 환경에서 Nginx 와 Uvicorn 을 통한 Deploy  (0) 2022.09.07
BeautifulSoup 4  (0) 2020.08.07