본문 바로가기
파이썬 (Python)/자동화 (Automation)

파이썬 Selenium을 이용한 Web Macro Python 프로그램 만들기

by ★√★ 2021. 3. 3.

 안녕하세요,  컴퓨터 내부가 아닌, Web 상에서 Macro를 사용 할 수 있는 프로그램을 짜볼려고 합니다. 여기에서 필요한 Package가 selenium 이라고 하는 Package를 설치를 하여야 합니다.

 

python-Selenium-썸네일
python-Selenium-썸네일

 

오늘은, 지난번에 pyautogui를 이용하여, 컴퓨터 내부에서 Macro를 Python으로 짜봤습니다. 일단, 기본적으로 지식을 알고, 그 지식을 자기가 필요한 요구에 맞게 아이디어를 짜서, Programming을 하시면 된다라고 봅니다. 그럼 Web상에서 매크로 효과를 구현하기 위해서 selenium이 무엇인지 부터 설명하면서 포스팅 시작하겠습니다. 

 

 

 

1. Selenium 란?

 

(출처 : https://www.selenium.dev/documentation/en/introduction/the_selenium_project_and_tools/)

 

The Selenium project and tools :: Documentation for Selenium

The Selenium project and tools Selenium controls web browsers Selenium is many things but at its core, it is a toolset for web browser automation that uses the best techniques available to remotely control browser instances and emulate a user’s interaction

www.selenium.dev

 

1) Selenium은 웹 브라우저를 제어한다.

 

- 셀레늄은 많은 것들이지만 그 핵심은 브라우저 인스턴스를 원격으로 제어하고 브라우저와 사용자의 상호 작용을 에뮬레이트하는 데 사용할 수있는 최상의 기술을 사용하는 웹 브라우저 자동화를위한 도구 세트입니다.

이를 통해 사용자는 최종 사용자가 수행하는 일반적인 활동을 시뮬레이션할 수 있습니다. 필드에 텍스트를 입력하고, 드롭다운 값을 선택하고, 확인란을 선택하고, 문서의 링크를 클릭합니다. 또한 마우스 이동, 임의 자바 스크립트 실행 등과 같은 많은 다른 컨트롤을 제공합니다.

웹 사이트의 프런트 엔드 테스트에 주로 사용되지만 Selenium은 브라우저 사용자 에이전트 라이브러리의핵심입니다. 인터페이스는 용도에 맞게 다른 라이브러리와 컴포지션을 장려하는 응용 프로그램에 유비쿼터스입니다.

 

2) Selenium 관련 인터페이스

 

이 프로젝트의 기본 원칙 중 하나는 모든 (주요) 브라우저 기술에 대한 공통 인터페이스를 지원하는 것입니다. 웹 브라우저는 매우 복잡하고 고도로 엔지니어링된 응용 프로그램으로 완전히 다른 방식으로 작업을 수행하지만 그렇게 하는 동안 자주 동일하게 보입니다. 텍스트가 동일한 글꼴로 렌더링되더라도 이미지가 같은 위치에 표시되고 링크가 동일한 대상으로 이동합니다. 그 아래에서 일어나는 일은 밤낮으로 도는 것과 다릅니다. 셀레늄은 이러한 차이를 "추상화", 코드를 작성하는 사람에서 자신의 세부 사항과 복잡성을 숨김. 이렇게 하면 복잡한 워크플로를 수행하기 위해 여러 줄의 코드를 작성할 수 있지만 이러한 동일한 줄은 Firefox, Internet Explorer, Chrome 및 기타 지원되는 모든 브라우저에서 실행됩니다.

 

 

3) Selenium 도구 및 지원

 

Selenium의 미니멀한 디자인 접근 방식은 더 큰 응용 분야에서 구성 요소로 포함될 수 있는 다기능성을 제공합니다. 셀레늄 우산 아래에 제공되는 주변 인프라는 당신에게 당신의 브라우저 그리드 따라서 다양한 컴퓨터의 여러 브라우저와 여러 운영 체제에서 테스트를 실행할 수 있습니다. 서버룸이나 데이터 센터에 있는 컴퓨터 뱅크가 모두 브라우저를 발사하는 동시에 사이트의 링크, 양식 및 테이블에 부딪히며 하루 24시간 응용 프로그램을 테스트한다고 가정해 보십시오. 가장 일반적인 언어에 대해 제공되는 간단한 프로그래밍 인터페이스를 통해 이러한 테스트는 끊임없이 병렬로 실행되어 오류가 발생할 때 다시 보고합니다. 사용자에게 브라우저를 제어할 뿐만 아니라 이러한 그리드를 쉽게 확장하고 배포할 수 있는 도구와 설명서를 제공함으로써 이를 실현하는 것이 목표입니다.

 

4) Selenium을 사용하는 사람

 

세계에서 가장 중요한 기업의 대부분은 브라우저 기반 테스트를 위해 셀레늄을 채택했으며, 종종 다른 독점 도구와 관련된 수년간의 노력을 대체했습니다. 인기가 높아짐에 따라 요구 사항과 과제가 배가됩니다.

웹이 더욱 복잡해지고 새로운 기술이 웹 사이트에 추가됨에 따라 가능한 한 이 프로젝트의 사명은 이를 따라가는 것입니다. 오픈 소스 프로젝트이기 때문에, 이 지원은 많은 자원 봉사자들의 관대 한 기부를 통해 제공되며, 모든 자원 봉사자는 "하루 일"을 가지고 있습니다.

이 프로젝트의 또 다른 임무는 더 많은 자원 봉사자가 이러한 노력에 참여하도록 장려하고 강력한 커뮤니티를 구축하여 프로젝트가 새로운 기술을 계속 따라 가고 기능 적 테스트 자동화를위한 지배적 인 플랫폼으로 남을 수 있도록하는 것입니다.

 

5) History

 

2004년에 Selenium 1이 출시되었을 때 웹 응용 프로그램의 프런트 엔드에서 일관된 동작을 수동으로 확인하는 데 소요되는 시간을 줄일 필요가 없었습니다. 그것은 당시 사용할 수있는 도구를 사용하고 사용자의 상호 작용을 모방하기 위해 테스트중인 웹 페이지에 JavaScript를 주입하는 데 크게 의존했습니다.

JavaScript는 DOM의 속성을 성찰하고 그렇지 않으면 할 수없는 특정 클라이언트 측 관찰을 수행 할 수있는 좋은 도구이지만 마우스와 키보드처럼 자연스럽게 사용자의 상호 작용을 복제 할 수있는 능력에 는 부족합니다. 사용 중입니다. 그 이후로 셀레늄은 전 세계에서 가장 큰 조직 중 가장 많이 사용되지는 않았지만 많은 사람들이 널리 사용하는 도구로 성장하고 성숙해왔습니다. Selenium은 Thoughtworks에서 개발한 가정용 테스트 자동화 툴킷에서 니셰 청중과 특정 사용 사례를 통해 전 세계의 사실상 브라우저 자동화 라이브러리로 이동했습니다.

셀레늄 RC가 당시 사용할 수있는 무역의 도구를 사용했듯이, Selenium 웹 드라이버 브라우저 상호 작용 부분을 브라우저 공급 업체의 홈 잔디에 복용 하 고 백 엔드의 책임을 묻는 하 여 그 전통 드라이브, 브라우저 를 향한 구현. 최근 이 작업은 셀레늄의 WebDriver 구성 요소를 사용자 에이전트를 위한 du jour 원격 제어 라이브러리로 전환하는 것이 목표인 W3C 표준화 프로세스로 발전했습니다.

 

 

2. Selenium 설치하기

 

: 이전 Python 포스팅을 보고 오신분들은, 이제 Package 설치를 할 때는, 어떤 명령문을 쓰는지에 대해서, 약간이나 지식을 싾였을 거라고 생각합니다. 

 

그럼 거두 절미하고, selenium을 설치 해보도록 하겠습니다. 

 

- pip install selenium 

 

이렇게 설치 구문을 입력을 하면, 아래 내용이 나옵니다. 저는 이미 설치를 한 상태라서, 아래 문구가 나오고, 설치가 되지 않은 상태라면, 두번째 문구가 나옵니다. 

 


1) 이미 설치가 되어 있는 경우

 

D:\Python_Project>pip install selenium 
Collecting selenium 
  Downloading https://files.pythonhosted.org/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl (904kB) 
     |████████████████████████████████| 911kB 243kB/s 
Requirement already satisfied: urllib3 in c:\users\administrator\anaconda3\lib\site-packages (from selenium) (1.24.2) 
Installing collected packages: selenium 
Successfully installed selenium-3.141.0 

 

python-Selenium-코드-구현-관련-사진1
python-Selenium-코드-구현-관련-사진1

 

 


2) 기 설치가 안되어 있는 경우

 

D:\Python_Project>pip install selenium 
Collecting selenium 
  Using cached https://files.pythonhosted.org/packages/80/d6/4294f0b4bce4de0abf13e17190289f9d0613b0a44e5dd6a7f5ca98459853/selenium-3.141.0-py2.py3-none-any.whl 
Requirement already satisfied: urllib3 in c:\users\administrator\anaconda3\lib\site-packages (from selenium) (1.24.2) 
Installing collected packages: selenium 
Successfully installed selenium-3.141.0 

D:\Python_Project> 

 

python-Selenium-코드-구현-관련-사진2
python-Selenium-코드-구현-관련-사진2

 

 

혹시, 지우고 다시 설치하고 싶은 신 분은 아래 명령문을 이용하시면 됩니다.

 

- pip uninstall selenium

 

#명령문을 입력하면 아래 내용을 보실수 있습니다. 여기에서 Y를 입력하시면 프로그램이 지워집니다. 



D:\Python_Project>pip uninstall selenium 
Uninstalling selenium-3.141.0: 
  Would remove: 
    c:\users\administrator\anaconda3\lib\site-packages\selenium-3.141.0.dist-info\* 
    c:\users\administrator\anaconda3\lib\site-packages\selenium\* 
Proceed (y/n)? y 
  Successfully uninstalled selenium-3.141.0

 

python-Selenium-코드-구현-관련-사진3
python-Selenium-코드-구현-관련-사진3

 

 

그럼 위 명령문을 이용하여, 설치가 완료가 되면, 일단, 아래 Code를 입력해서, selenium을 사용할 수 있는 환경을 Setting 합니다. 

 

# Webdriver를 사용할 수 있게 선언합니다.

from selenium import webdriver                                         



# Key 항목을 이용합니다. 

from selenium.webdriver.common.keys import Keys



# 어떤 Action을 할지를 정의 합니다.
from selenium.webdriver.common.action_chains import ActionChains



# 다른 방법으로 이용할 수 있어서 예비로 선언함

import pyautogui



# 웹 상에 상황에 맞게, Delay를 주기 위해서 선언합니다.

import time

 

python-Selenium-코드-구현-관련-사진4
python-Selenium-코드-구현-관련-사진4

 

 

 그리고 나서, 일단, 저희가 사용하는 Webdriver는 Chrome Driver를 사용할 겁니다. Chrome Driver를 Download 하기 위해서는 일단 구글에서, Chrome Drvier를 검색을 합니다. 맨 처음에 나오는 항목을 클릭해서 들어가면 아래 와 같이 화면이 보이고, Download 받으시면 됩니다. 

 

 

 

python-Selenium-코드-구현-관련-사진5
python-Selenium-코드-구현-관련-사진5

 

 

 

python-Selenium-코드-구현-관련-사진6
python-Selenium-코드-구현-관련-사진6

 

그럼 다운을 받으시면, Chrome Driver를 Python File이 있는 폴더에 설치를 해줍니다. 왜냐하면, python code를 Chrom Driver가 실행시키기 위해서 같은 폴더에 나두어야 실행이 됩니다. 

 

그럼 일단 소프트웨어 측면에서는 준비가 완료가 되었습니다. 그럼 아래와 같이 Code를 추가 작석을 하시면 됩니다. 

 

 

# Chrome Driver를 사용한다라고 선언을 하고, 그 항목을 Driver라는 변수에 집어 넣습니다. 

driver = webdriver.Chrome()



# Chrome Driver를 이용하여, 접속하고 싶은 사이트 주소를 url이라는 변수에 집어 넣습니다. 

url = 'https://www.naver.com/'



# url에 있는 주소로 접속을 합니다. 

driver.get(url)



# 화면 최대화 합니다. 

driver.maximize_window()

 

 

이렇게 하면, 아래 Snap Shot 처럼, Naver창이 실행이 됩니다.

 

 

python-Selenium-코드-구현-관련-사진7
python-Selenium-코드-구현-관련-사진7

 

 

그럼 일단, 접속은 됐으니까, 여기에서 실행하고 싶은 Action을 실행 시켜 보도록 하겠습니다. 제일 간단한, Log In 되는 Action을 Code를 추가 해보도록 하겠습니다. 

 

# action 이라는 변수에, driver에 있는 Chrome Driver를 이용할 수 있는 Action Chains을 집어 넣습니다.

action = ActionChains(driver)



# 웹상에 클래스와 ID와 Class를 둘다 사용 할 수 있다. 아래 Snap shot 참조
driver.find_element_by_css_selector('.ico_local_login.lang_ko').click() 



  1) ID 인 경우에는, #ID 이렇게 넣어줘야 함.

  2) Class 인 경우에는, .Class 이렇게 넣어줘야 함.

 

 

 

python-Selenium-코드-구현-관련-사진8
python-Selenium-코드-구현-관련-사진8

 

 

 

# 브라우저에서 실행하는 속도를 감안해서 약간의 Delay를 줘야 한다 아니면 다음 명령이 바로 실행이 된다. 즉, 제대로 된 실행이 이뤄지지 않습니다. 
time.sleep(2)



# 어떤 내용을 Typing 합니다. 
action.send_keys('Naver ID').perform()



time.sleep(2)



# 이 부분에 비밀 번호를 Typing 합니다. 방법만 틀릴 뿐이지 똑같습니다.



time.sleep(2)

driver.find_element_by_css_selector('.btn_global').click()

time.sleep(2)

 

 

실행하면, 아래 화면 처럼 나옵니다. 일단 로그인을 누르면, 기계가 맞냐고 물어보는 문자 입력 창이 나옵니다. 먼가 Chrom Driver 처럼, 자동화 프로그램 사용 방지 Coding을 Naver가 한거 같은 느낌입니다. 

이 부분에 대해서는 저도 나름대로 공부하고, 테스트 해보도록 하겠습니다. 

 

 

python-Selenium-코드-구현-관련-사진9
python-Selenium-코드-구현-관련-사진9


이상입니다. 지금까지 컴퓨터 내부가 아닌, Web 상에서 Macro를 사용 할 수 있는 프로그램 구현을 위한 Package selenium 에 대해서 알아보고 구현까지 해보았습니다. 하나 하나 해보면서 프로그램의 무궁한 가능성을 체감하고 있습니다. 더 열심히 노력해서 더 괜찮은 프로그래머가 되기 위해서 노력하도록 하겠습니다.

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

 

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab