이야기모바일 LGU+ 알뜰폰 가입했습니다.

내맘대로(50분+500MB) 통화50분, 문자50건, 데이터500MB

2023.11월 행사 요금제 6개월간 0원이고 이후에는 4,950원입니다.

 

모빙 SKT알뜰폰(100분/3GB) 5개월 무료

 

크롬 개발자모드에는 Recorder가 있습니다.

웹페이지에서 사용자의 동작을 그대로 녹화해주는 기능입니다.

각 단계별로 selector(css)를 이용하여 클릭, 텍스트입력 등의 동작을 녹화해줍니다.

 

네이버에서 검색란에 '테스트'라고 입력한 것을 녹화해보면 다음과 같습니다.

selenium에서 change 동작은 'sendkeys'로 처리해주시고  css는 '#query'를 넣어주시면 되겠습니다.

page := ComObjCreate("Selenium.CHROMEDriver")
page.get("https://www.naver.com")
strPath := "#query"
el := page.FindElementByCss(strPath)
el.SendKeys("테스트")
el.SendKeys(page.Keys.ENTER) ;엔터키 입력

웹페이지에서 특정 요소(element)를 가져올 경우 여러가지 방법이 있습니다.

 

 

개발자모드에서 보면 위와 같이 해당 요소를 복사하는 방법이 몇가지 표시됩니다.

이 중에서 우리는 selector(CSS), xpath 2가지를 주로 사용하게 됩니다.

물론 아래와 같이 id, name, tagname,classname 등을 사용하여 가져올 수도 있습니다.

결론부터 말씀드리면 seletor(css)를 가능하면 사용하고 오류가 날 경우에는 xpath를 사용하면 됩니다.

selector는 속도가 빠르지만 태그가 중복되서 동작 안하는 경우가 있습니다. 그때는 xpath를 사용해야 합니다.

 

예를들어 https://naver.me/xoLTqGXB

 

업무환경 만족도 설문지

 

form.office.naver.com

위 질문지에서 1항목의 질문1의 radio 들은 모두 selector가 동일합니다. 따라서 이 경우에는 xpath를 사용해야 합니다.

 

그러면 그냥 xpath를 사용하면 되는거 아닌가 하는 생각이 들겠지만 xpath는 속도가 상대적으로 느립니다.

 

웹 요소(element)라 하면 text, edit, radio, check, button 등 웹에 있는 모든 객체(object)를 말합니다.

작업을 하려면 먼저 웹에서 element를 획득해야 합니다. 그 방법을 먼저 살펴보겠습니다.

 

selenium basic을 설치하면 라이브러리 설명문서(API documentation)도 설치가 되는데, 여기에 사용법이 나와 있습니다.

크롬드라이버 클래스(ChromeDriver)의 설명을 한번 보도록 하겠습니다.

오토핫키에서 크롬드라이버 클래스를 상속받아서 인스턴스를 생성하는 방법은 아래와 같습니다.

page := ComObjCreate("Selenium.CHROMEDriver") ;크롬 인스턴스 생성

크롬드라이버의 메소드(method) 중에 FindElement 라는 것을 살펴보면 다음과 같이 설명이 나와 있습니다.

 

네이버에 접속하여 검색란에 '테스트'라고 입력해 보겠습니다.

page := ComObjCreate("Selenium.CHROMEDriver")
page.get("https://www.naver.com")
by := ComObjCreate("Selenium.By")
el := page.FindElement(by.Id("query"))
el.SendKeys("테스트")
page := ComObjCreate("Selenium.CHROMEDriver")
page.get("https://www.naver.com")
by := ComObjCreate("Selenium.By")
by := by.Id("query")
el := page.FindElement(by)
el.SendKeys("테스트")

크롬드라이버 메소드에는 FindElementById 라는 것도 있어서 그냥 이것을 써도 됩니다.

page := ComObjCreate("Selenium.CHROMEDriver")
page.get("https://www.naver.com")
el := page.FindElementById("query")
el.SendKeys("테스트")

 

오토핫키로 크롬을 제어하는 방법을 맛보기로 간단히 살펴보겠습니다.

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

global page
Gui, Add, text, section, 1.Routine-A 2.Exit app

Gui, show
Winset, AlwaysOnTop, on, sam1.ahk	;항상 위로

url := "https://www.google.com"
initChrome(url)

return

^1::
	url := "https://www.naver.com"
	page.get(url)
return

^2::
	ExitApp

initChrome(url)
{
	page := ComObjCreate("Selenium.CHROMEDriver") ;크롬 인스턴스 생성
	;'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.' 메시지 끄기, 최초 윈도우 크기 설정
	page.SetCapability("goog:chromeOptions", "{""excludeSwitches"":[""enable-automation""], ""args"":[""--window-size=800,1200""]}")
	page.get(url) ;웹사이트 이동	
}

GuiClose:
	ExitApp

 

selenium basic 다운로드

selenium basic 안내페이지에 보면 아래와 같이 나와 있습니다.

A Selenium based browser automation framework for VB.Net, VBA and VBScript

이 말은 COM라이브러리이기 때문에 오토핫키 뿐만 아니라 당연히 Excel VBA에서도 활용이 가능하다는 이야기입니다.

 

설치는 관리자모드로 할 것을 추천합니다. 그래야 C:\Program Files\Selenium Basic 에 설치됩니다.

설치를 마치면 안내페이지에 활용할 브라우저별로 최신 버전의 접속드라이버를 다운로드 받아서  C:\Program Files\Selenium Basic 경로에 덮어쓰기 해주셔야 합니다.

 

예를 들어 크롬의 경우에는 아래에 접속해서 현재 크롬의 버전에 맞게 윈도우 버전(chromedriver_win32.zip)을 다운로드 해주시면 됩니다.

https://sites.google.com/chromium.org/driver/

 

ChromeDriver - WebDriver for Chrome

WebDriver is an open source tool for automated testing of webapps across many browsers. It provides capabilities for navigating to web pages, user input, JavaScript execution, and more. ChromeDriver is a standalone server that implements the W3C WebDriver

sites.google.com


(2023-01-13) 내용 추가

이번에 윈도우를 재설치 하면서 발견하게 되었습니다. 크롬 오브젝트 생성(ComObjCreate)할 때 오류가 나는 경우에는 닷넷프레임워크(.NET Framework 3.5)를 설치해야 합니다. 설치 방법은 간단합니다.

 

selenium basic가 설치된 하위 폴더에 /scripts/StartChrome.vbs 를 실행하면 오류가 나면서 닷넷프레임워크를 설치 여부를 물어봅니다. 설치해주시기 바랍니다.

 

저는 웹자동화(Web Automation)를 웹사이트와 소통을 사용자의 마우스 클릭이나 키보드 입력이 아닌 미리 설정한 방식으로 가져와서 가공하거나 입력을 하는 것이라 칭하겠습니다.

1. 웹사이트에서 컨텐츠를 가져와서 데이터를 가공: 파이썬(python)에서 BeautifulSoup을 이용하기
2. 웹사이트에 각종 입력이나 마우스클릭을 자동으로 해주는 것

첫번째의 경우에는 파이썬을 이용하여 headless모드로 가공하는 것을 추천합니다. 이에 대해서는 다양한 정보가 많이 있으므로 저는 두번째 경우의 사용법을 알려드리고 정보를 나눌까 합니다.

추천 언어 라이브러리 장점 단점 비고
2위 python selenium 다양한 기능, 안정성 최초 로딩 속도가 느림  
1위 autohotkey selenium 다양한 기능, 빠른 속도 별도로 selenium basic 을 설치해야 함  
3위 autohotkey chrome.ahk 빠른 속도, 별도 프로그램 설치 불필요 selenium에 비해 상대적으로 기능이 적고 불안정 특히, 요소(element)와 상호작용할 때 해당 요소가 로딩되었는지 판별이 제대로 안되는 경우가 있음

위의 표에서 설명했듯이 특수한 경우를 제외하고는 오토핫키(autohotkey)와 셀레니엄(selenium) 조합을 사용할 것을 추천합니다. 파이썬(python)은 안정적이나 처음 로딩이 너무 느립니다.

+ Recent posts