menu

Python + Selenium을 이용하여 chrome 자동화 - 기본 사용법 및 html 요소 조작 관련 정리

Python, Chrome, Selenium을 이용하여 html 태그 취득, 마우스 클릭 등의 UI조작과 관련된 기본적인 내용을 정리하겠습니다.


headless 모드 기본
  • headless 샘플 코드

     from selenium import webdriver
    
     options = webdriver.ChromeOptions()
     options.add_argument('--headless')
     driver = webdriver.Chrome(options=options)
    
     driver.get('https://www.mansion-review.jp/shinchiku/prefecture/34.html')
     print(driver.title)
     # 広島県の新築マンションランキング 69物件|新築マンションレビュー
     driver.quit()
    

    webdriver 옵션으로 headless를 지정하면, chrome 동작이 눈에 보이지 않고 백그라운드에서 동작하게 됩니다.


html 요소 취득 방법
  • By CSS

     <span class="rli_title">
        <a target="_blank" href="https://www.mansion-review.jp/mansion/707867.html">
           シティタワー広島
        </a>
     </span>
    

    획득한 html에 위와 같은 태그가 있는 경우

     for name in driver.find_elements_by_css_selector("span.rli_title"):
        print(name.text)
    

    find_elements_by_css_selector 함수로 해당 태그를 지정할 수 있습니다.

    .text 함수로는 innerText값을 획득 가능합니다.


  • By ID

    ID로 html 태그를 얻어오고자 할 때는 하기의 함수를 사용할 수 있습니다.

     from selenium.webdriver.common.by import By
    
     driver.find_element(by=By.ID, value="<취득하고자 하는 요소 ID>")
     driver.find_element_by_id("<취득하고자 하는 요소 ID>")
    

    또한 element 대신에 elements를 사용함으로써 해당하는 모든 html 태그를 리스트 형으로 취득할 수도 있습니다.

     driver.find_elements(by=By.ID, value="<취득하고자 하는 요소 ID>")
     driver.find_elements_by_id("<취득하고자 하는 요소 ID>")
    
     # 취득한 첫번째 요소의 innerText를 획득하기
     driver.find_elements(by=By.ID, value="<취득하고자 하는 요소 ID>")[0].text
    


  • By class name & tag name

    클래스명을 이용

     driver.find_elements_by_class_name("<취득하고자 하는 요소 CLASS>")
    

    태그명을 이용

     driver.find_element_by_tag_name("<취득하고자 하는 요소 TAG>")
    

    find_element함수를 이용

     driver.find_elements(By.CLASS_NAME, "<취득하고자 하는 요소 CLASS>")
     driver.find_element(By.TAG_NAME, "<취득하고자 하는 요소 TAG>")
    


  • By name

    html의 name속성을 이용하여 요소를 찾을 수 있습니다.

     driver.find_element_by_name("<취득하고자 하는 요소의 name 값>")
     driver.find_element(By.NAME, "<취득하고자 하는 요소의 name 값>")
    


  • By Link Text & By Partial Link Text

    요소의<a href=....></a>사이의 텍스트를 사용해서 요소를 찾을 수 있습니다.

     # "페이지 검색"이라는 텍스트가 있는 요소 검색
     driver.find_elements_by_link_text("페이지 검색")
    
     # "검색"이라는 텍스트가 포함되어 있는 요소 검색
     driver.find_elements_by_partial_link_text("검색")
    


html 요소 상태 확인
   element.is_displayed()
   element.is_enabled()
   element.is_selected()


유저 입력 (클릭이나 선택)
  • 마우스 클릭

    취득한 요소에 대해 .click() 함수를 사용하여 클릭 가능

  • submit

    기본적으로 취득한 요소에 대해 click() 함수를 사용하여 submit 버튼을 클릭하면 됩니다.

    혹은 form 내부에 있는 요소에 대해 element.submit() 함수를 이용하여 submit이 가능합니다.

  • 문자열 입력

    send_keys() 함수를 이용하여 text feild나 text area에 문자열을 입력합니다.

    send_keys() 함수를 이용하기 위해서는 from selenium.webdriver.common.keys import Keys 를 선언해줄 필요가 있습니다.

     from selenium.webdriver.common.keys import Keys
    
     element.send_keys("<입력하고자 하는 문자열>")
    
     # 특수키 입력
     element.send_keys(Keys.RETURN)
    
     # 문자열 입력 후 특수키 입력
     element.send_keys("文字列", Keys.RETURN)
    
     # 요소 클리어
     element.clear() 
    
  • select 요소 내의 option 선택

    select = Select(driver.find_element….) 를 이용하여 select 요소를 취득할 수 있습니다.

     select = Select(driver.find_element....)
    
     # 선택하기 
     select.select_by_index(index)
     select.select_by_visible_text("text")
     select.select_by_value(value)
    
     # 선택 해제하기
     select.deselect_by_index(index)
     select.deselect_by_visible_text("text")
     select.deselect_by_value(value)
     select.deselect_all() # 모든 선택 해제
    
     # 선택된 옵션 리스트
     select.all_selected_options
    
     # 선택 가능한 옵션 리스트
     select.options
    


    python scraping에 관한 포스트 모음 : Tags - Scraping



Written on May 30, 2019