반응형

 안녕하세요. 오늘은 Python 자동화 라이브러리 중 Selenium에 대해 알아보도록 하겠습니다. Selenium은 웹 브라우저를 제어하여 웹 페이지를 자동으로 탐색하고 상호작용하는 데 사용되는 라이브러리입니다. 웹 애플리케이션 테스트나 웹 스크래핑에 활용됩니다.

 웹 개발을 하거나, 티케팅, 블로그, 등등 반복적인 작업을 웹에서 필요로 하는 분이라면 Selenium을 통해 자동화 해보는 것이 큰 도움이 될 것이라고 생각합니다.

 

Selenium이란?

Selenium은 웹 브라우저 자동화를 위한 라이브러리로, 웹 페이지를 자동으로 제어하고 상호작용하는 데 사용됩니다. 주로 웹 애플리케이션의 테스트 자동화나 웹 스크래핑 작업에 활용됩니다. Selenium은 다양한 프로그래밍 언어에서 사용할 수 있지만, 파이썬에서도 매우 인기 있는 라이브러리입니다.

  • 웹 브라우저 제어: Selenium을 사용하여 웹 브라우저를 자동으로 열고 제어할 수 있습니다. 주로 Chrome, Firefox, Edge, Safari 등의 브라우저와 연동하여 사용합니다.

  • 웹 페이지 탐색: 웹 페이지의 URL을 지정하고 페이지를 열어볼 수 있습니다. driver.get("URL") 메서드를 사용하여 페이지로 이동할 수 있습니다.

  • 요소 찾기: 웹 페이지의 요소(버튼, 링크, 입력 필드 등)를 찾아서 상호작용할 수 있습니다. driver.find_element() 또는 driver.find_elements() 메서드를 사용하여 요소를 찾습니다.

  • 요소 상호작용: 찾은 요소에 클릭, 텍스트 입력, 선택 등의 동작을 수행할 수 있습니다. 예를 들어, element.click()로 요소를 클릭하거나, element.send_keys("text")로 텍스트를 입력할 수 있습니다.

  • 브라우저 제어 및 조작: 웹 브라우저의 창 크기 조절, 스크롤 조작, 뒤로/앞으로 가기 등의 작업을 할 수 있습니다.

  • 웹 페이지 스크래핑: 웹 페이지의 데이터를 추출하여 분석하는 데 사용할 수 있습니다. BeautifulSoup과 조합하여 웹 스크래핑 작업을 수행할 수 있습니다.

  • 웹 애플리케이션 테스트: 웹 애플리케이션의 동작을 자동으로 시뮬레이션하여 테스트할 수 있습니다. 이를 통해 애플리케이션의 버그를 발견하거나 기능을 확인할 수 있습니다.

Selenium은 다양한 브라우저 드라이버를 지원하며, 각 브라우저에 따라 해당 드라이버를 설치해야 합니다. 파이썬에서 Selenium을 사용하기 위해서는 selenium 패키지를 설치해야 하며, 웹 드라이버를 이용하여 브라우저를 연결하고 제어할 수 있습니다.

예를 들어, Chrome 브라우저를 사용하여 Selenium을 실행하려면 Chrome 웹 드라이버를 다운로드하고 설치한 후, 다음과 같이 코드를 작성하여 사용할 수 있습니다:

 

from selenium import webdriver

# Chrome 웹 드라이버의 경로 지정 (다운로드한 드라이버의 경로로 바꿔주세요)
driver_path = '경로/chromedriver'

# Chrome 웹 드라이버 초기화
driver = webdriver.Chrome(executable_path=driver_path)

# 웹 페이지 열기
driver.get('https://www.example.com')

# 원하는 작업 수행 (예: 요소 클릭, 텍스트 입력 등)
# 아래는 Google 검색 버튼을 찾아서 클릭하는 예제입니다.
search_button = driver.find_element_by_name('btnK')
search_button.click()

# 브라우저 닫기
driver.quit()

 

Selenium 활용 방안

 

  • 웹 스크래핑: 웹 사이트에서 데이터를 수집하거나 정보를 추출할 때 사용됩니다. 예를 들어, 온라인 상품 가격 모니터링, 뉴스 기사 수집, 주식 시세 추적 등이 있습니다.

  • 웹 테스트 자동화: 웹 애플리케이션의 동작을 자동으로 테스트하고 검증할 수 있습니다. 사용자의 다양한 시나리오에 따른 애플리케이션 동작을 테스트하여 버그를 찾고 개선하는 데 활용됩니다.

  • 데이터 수집 및 정제: 웹 상에서 데이터를 수집하여 자동으로 정제하고 저장할 수 있습니다. 예를 들어, 공공 데이터나 웹페이지의 테이블 데이터를 수집하여 데이터베이스에 저장하는 작업을 자동화할 수 있습니다.

  • 웹 양식 작성 및 제출: 웹 페이지의 양식을 자동으로 작성하고 제출할 수 있습니다. 예를 들어, 여러 웹사이트에 로그인하여 정보를 입력하고 양식을 제출하는 작업을 자동화할 수 있습니다.

  • 스크린샷 및 동영상 캡처: 웹 페이지의 스크린샷을 자동으로 캡처하거나 웹 페이지에서 동작하는 과정을 동영상으로 기록할 수 있습니다. 이는 웹 디자인 또는 사용자 경험 분석에 활용될 수 있습니다.

  • 웹 데이터 시각화: Selenium을 사용하여 웹 페이지에서 데이터를 추출한 후, 그 데이터를 시각화하여 효과적인 차트나 그래프로 표현할 수 있습니다.

  • 웹 자동화 테스트베드: 웹 애플리케이션의 다양한 시나리오를 자동화하여 테스트해보는 환경을 구축할 수 있습니다. 이는 빠른 피드백과 안정성을 유지하기 위해 유용합니다.

  • 웹 페이지 모니터링: 정기적으로 웹 페이지를 확인하여 변경 사항을 감지하고, 웹사이트의 가용성 및 성능을 모니터링하는 데 사용됩니다.

  • 웹 브라우저 자동화: 웹 페이지를 방문하고 필요한 작업을 자동으로 수행하는 것 외에도, 웹 애플리케이션에 대한 특정 동작을 시뮬레이션하거나 반복 작업을 자동화하는 데 활용됩니다.

 

Selenium 기초 문법

  • 웹 드라이버 초기화 및 페이지 열기:
    웹 드라이버 초기화: webdriver.Chrome()과 같은 방식으로 사용할 웹 브라우저의 드라이버를 초기화합니다.
    웹 페이지 열기: driver.get("URL") 메서드로 원하는 URL의 웹 페이지를 엽니다.

 

  • 웹 요소 찾기:
    find_element_by_*(): 다양한 선택자를 사용하여 웹 요소를 찾을 수 있습니다. 예를 들어 find_element_by_id(), find_element_by_name(), find_element_by_class_name() 등이 있습니다.

 

  • 웹 요소 상호작용:
    click(): 버튼이나 링크를 클릭합니다.
    send_keys(): 텍스트 필드나 입력 상자에 텍스트를 입력합니다.
    submit(): 폼을 제출합니다.

 

  • 웹 요소 값 가져오기:
    text: 웹 요소의 텍스트 값을 가져옵니다.
    get_attribute("속성명"): 웹 요소의 특정 속성 값을 가져옵니다.

 

  • 대기 기능:
    implicitly_wait(seconds): 암묵적 대기 시간을 설정하여 일정 시간 동안 웹 요소가 나타날 때까지 대기합니다.
    WebDriverWait(driver, timeout): 명시적 대기 시간을 설정하여 특정 조건이 충족될 때까지 대기합니다.

 

  • 브라우저 조작:
    back(): 이전 페이지로 돌아갑니다.
    forward(): 앞으로 가기를 합니다.
    refresh(): 페이지를 새로고침합니다.

 

  • 브라우저 종료:
    quit(): 웹 드라이버를 종료하고 브라우저를 닫습니다.

 

  • 고급 작업:
    웹 요소 여러 개 가져오기: find_elements_by_*()
    프레임 전환: switch_to.frame()
    창 전환: switch_to.window()

 

  • 선택자 사용:
    find_element(By.*,"선택자"): 선택자를 사용하여 웹 요소를 찾습니다. By.ID, By.NAME, By.CLASS_NAME 등을 사용할 수 있습니다.

 

Selenium으로 게임 자동화 매크로 만들기

 

Selenium으로 Chrome의 Dino Runner라는 게임을 자동화 해보겠습니다. Dino Runner는 인터넷이 잘 안될때 크롬에서 제공하는 게임인데 매크로로 간단하게 게임을 자동화 할 수 있습니다.

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Chrome 웹 드라이버의 경로 지정 (다운로드한 드라이버의 경로로 바꿔주세요)
driver_path = '경로/chromedriver'

# Chrome 웹 드라이버 초기화
driver = webdriver.Chrome(executable_path=driver_path)

# Dino Runner 게임 페이지 열기
driver.get('chrome://dino')

# 게임 시작 대기
time.sleep(2)

# 스페이스바 누르기 함수
def press_space():
    body = driver.find_element_by_tag_name('body')
    body.send_keys(Keys.SPACE)

# 게임 플레이
try:
    while True:
        press_space()
        time.sleep(0.1)
except KeyboardInterrupt:
    print("게임을 종료합니다.")

# 브라우저 닫기
driver.quit()

 

반응형
반응형

 

안녕하세요. 이번에는 파이썬 라이브러리 중 자동화에 쓰이는 pyautogui에 대해 알아보겠습니다. 사용법도 매우 간단하기 때문에, 파이썬을 잘 모르는 분들이나, 초보자분들도 쉽게 따라하실 수 있습니다. 자세한 내용을 알고싶으시다면 아래 사이트를 참고하시길 바랍니다.

 

 

https://pypi.org/project/PyAutoGUI/

 

PyAutoGUI

PyAutoGUI lets Python control the mouse and keyboard, and other GUI automation tasks. For Windows, macOS, and Linux, on Python 3 and 2.

pypi.org

 

pyautogui 설치

파이썬 라이브러리이다보니 매우 간단하게 설치하실 수 있습니다. Python과 Pip이 깔려있다는 전제하에 command창에 다음 명령어를 입력하시면 됩니다.

>pip install pyautogui

 

설치가 완료되면, import를 시켜 코딩을 시작해보도록 하겠습니다.

import pyautogui

 

pyautogui 주요 기능

1. screenshot() 

화면을 캡쳐하는데 이용되는 함수입니다.

#캡쳐 후 저장
screenshot = pyautogui.screenshot()
screenshot.save('C:\my_screenshot.png')

#캡쳐 저장 동시
screenshot2 = pyautogui.screenshot('C:\my_screenshot2.png')

해당 기능은, UI를 자동화하여 돌려놓았을때, 주기적으로 캡쳐를 해두면 간혹 자동화 동작이 잘 되지 않았을 때 원인을 파악하는 용도로 쓰면 좋은 것 같습니다.

 

2. locateOnScreen()

화면을 인식하여 미리 저장해둔 이미지가 화면상에 존재하는지 파악하는 함수입니다.

#click_button.png가 현재 화면에 있는지
clickBtn = pyautogui.locateOnScreen('click_button.png')

clickBtn은 만약 현재 화면에 해당 버튼이 존재한다면 해당 location을 return 합니다

return 값 :  (left, top, width, height) 

 

 

3. 마우스 컨트롤

자동화를 하기 위해서는 마우스와 키보드를 주로 사용하게 될텐데, 우선 마우스를 어떻게 컨트롤하는지 알아보겠습니다.

#1.마우스 이동
pyautogui.moveTo(100, 200) #x 100, y 200 위치로 이동
pyautogui.moveTo(100, 200, 5) # 해당 위치로 5초동안 이동

#2.마우스 클릭
pyautogui.click()
pyautogui.click(button='right') #우클릭
pyautogui.doubleClick() #더블 클릭
pyautogui.click(clicks=5, interval=1) #1초 간격으로 5번 클릭

#3.마우스 드래그
pyautogui.moveTo(100, 200)
pyautogui.dragTo(300, 500) #(100, 200)에서 (300, 500)까지 드래그

앞에서 살펴본 locateOnScreen() 함수를 사용하여 원하는 이미지의 위치를 찾아내고 해당 위치로 마우스를 moveTo 하고, 클릭하면 원하는 부분을 클릭하는 코드가 완성됩니다.

 

4. 키보드 컨트롤

키보드는 어떻게 컨트롤하는지 알아보겠습니다.

(1). hotkey()

#hotkey : 키보드 하나씩 입력
pyautogui.hotkey('win') #윈도우 키를 누릅니다.
pyautogui.hotkey('ctrl', 'c') #여러개를 인자로 넣어 동시에 누르게 할 수 있습니다 

''' hotkey list
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']
'''

hotkey를 사용하여 복사(ctrl , c), 붙여넣기(ctrl, v), 윈도우 실행(win, r) 등 단축기로 사용하던 것들을 실행할 수 있습니다.

 

(2). write()

pyautogui.write("낙서코딩 블로그입니다") #괄호 안의 문자 입력
pyautogui.write("낙서코딩", interval = 1) #한글자씩 1초 간격으로 입력

 

다른 함수들도 많지만, 사실상 위의 두 함수만 사용해도 무방합니다. 

 

마무리

이번 포스팅에서는 아주 기본적인 내용들만 알려드렸지만, 해당 기능들만 사용해도 웬만한 것은 다 자동화 할 수 있습니다. 하지만 여러 컴퓨터에서 자동화 프로그램을 돌리고 싶다면, 고려해야할 부분이 늘어납니다. 예를 들어 locatOnScreen() 함수를 사용하는데, 버튼 이미지가 컴퓨터마다 해상도가 달라 인식을 못할 수도 있고, 어느 위치로 마우스를 moveTo() 하려는데 해상도 차이로 각각의 위치가 다를 수도 있습니다. 이러한 부분들은 위치가 아닌 해당 버튼을 객체로 인식하여 이동하는 방법이 있는데 다음 포스팅에서 소개해드리도록하겠습니다.

 

 

반응형

+ Recent posts