menu

Python + Selenium을 이용하여 chrome 자동화 - 페이지 조작 및 스크린샷 관련 정리

Python, Chrome, Selenium을 이용하여 페이지 조작과 스크린샷 관련하여 기본적인 내용을 정리하겠습니다.


페이지 기본 조작 관련

특정 페이지 획득

driver.get("<획득하고자 하는 url>")

뒤로가기

driver.back()

앞으로 가기

driver.forward()

페이지 갱신

driver.refresh()

현재 페이지의 url 획득

driver.current_url

현재 페이지 타이틀 획득

driver.title

페이지 소스 획득

driver.page_source

현재 페이지 닫기

driver.close()

모든 페이지 닫기

driver.quit()


페이지 대기 관련

ajax 를 많이 사용하여 작성된 페이지에 대해서, 요소 추가 등의 타이밍을 맞추기 위해서는 요소의 존재나 상태를 획득할 필요가 있습니다.

  • 조건을 지정하여 대기

    아래의 모듈을 기본적으로 import 하여 조작 가능합니다.

     from selenium.webdriver.common.by import By
     from selenium.webdriver.support.ui import WebDriverWait
     from selenium.webdriver.support import expected_conditions as EC
    

    최대 대기 시간 지정

     wait = WebDriverWait(driver, 10) # 10초
    

    페이지 타이틀이 표시될 때까지 대기

     wait.until(EC.title_contains("<PAGE TITLE>"))
    

    요소를 클릭하여, innerText가 “문자열” & class 속성이 “myclass”인 요소가 표시될때까지 대기

     element.click()
     wait.until(
        EC.text_to_be_present_in_element((By.CLASS_NAME, "myclass"), "문자열")
     )
    

    class속성이 “myclass” 인 요소가 visible이 될때까지 대기하고 요소 클릭

     a = wait.until(
        EC.visibility_of_element_located((By.CLASS_NAME, "myclass"))
     )
     a.click()
    


    그 밖의 다양한 함수가 존재합니다.

    • 조작할 요소 지정

      presence_of_element_located

      visibility_of_element_located

      presence_of_all_elements_located

      frame_to_be_available_and_switch_to_it

      invisibility_of_element_located

      element_to_be_clickable

      element_located_to_be_selected

    • 조작할 요소와 값을 지정

      텍스트 지정

      text_to_be_present_in_element

      text_to_be_present_in_element_value

      셀렉션 상태를 boolean으로 지정

      element_located_selection_state_to_be


  • 폴링시간 지정

    요소가 바로 발견되지 않을 경우 대기 시간을 지정할 수 있습니다.

    driver.implicitly_wait(10)

  • time.sleep() 사용

    스크래핑 하는 사이트 서버에 무리를 가하지 않기 위해서 time.sleep() 함수를 사용할 필요가 있습니다.


특정 html 요소까지 스크롤
   element = driver.find_element_by_id("ID")
   actions = new Actions(driver)
   actions.move_to_element(element)
   actions.perform()


스크린샷 관련

스크린샷을 하기 위해서 사용 가능한 함수를 정리하겠습니다.

  • 페이지 사이즈 관련

    페이지를 특정 사이즈로 변경

    driver.set_window_size(1280, 720)

    페이지를 최대 사이즈로 변경 (headless 모드에서는 동작 안함)

    driver.maximize_window()

    페이지 사이즈 획득

    driver.get_window_size()

    미리 페이지 사이즈를 지정해서 chrome을 실행

     options.add_argument('--window-size=800, 600')
    
     # 최대 사이즈로 chrome 실행
     options.add_argument('--start-maximized')  
    
     # 전체 화면 표시로 chrome 실행
     options.add_argument('--start-fullscreen')  
    
  • 스크롤바 제거

    driver.execute_script("document.body.style.overflow='hidden';")

  • 스크린샷

    파일 이름을 지정하여 스크린샷

    driver.save_screenshot('screenshot.png')

    스크린샷을 파일이 아닌 메모리에 저장

     # 메모리에 저장을 해서 바이너리 데이터를 파일 오브젝트로 변환하거나 할 수 있습니다.
     driver.get_screenshot_as_png()
     driver.get_screenshot_as_base64()
    


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



Written on June 1, 2019