본문 바로가기

❤25기/25기 세미나

[25기 세미나] Selenium으로 솔룩스 공식 사이트에 자동으로 댓글 달기(1)

 

Selenium과 기본 환경 세팅

1.1 Selenium(셀레니움)이란? 

 

Selenium(셀레니움)이란? 

셀레니움은 브라우저 자동화, 크롤링과 관련된 라이브러리입니다.

보통 윈도우 익스플로러같은 경우 DOM이라는 것을 통해 제어하는데요,
크롬이나 파이어폭스같은 경우 웹드라이버를 따로 지원해줘서 셀레니움을 통해 제어가 가능합니다.
간단한 웹 접속, 스크롤하는것 부터
웹사이트 로그인, 버튼 누르기, 특정 하이퍼링크 누르기 등의 기능으로
크롤링(Crawling) 이나 웹 매크로(Macro)등 다양한 작업을 할 수 있습니다.
그 외에도 세분화 하는 경우엔
프록시 접속하기, 리캡차 넘어가기 등등도
가능하다고 합니다.

 

DOM이란?

DOM은 Document Object Model로, 한국어로는 문서 객체 모델입니다. 

DOM은 HTML문서 구조를 말하는데요. 
HTML 문서의 기본 구조는 최상위 객체로 <html>이 있으며, 그 하위 객체로는 <head>와 <body>가 있습니다.
예를 들어, 자바스크립트를 이용해 이미지의 src속성을 바꾸고 싶다면 지정된 <img>를 선택해 src속성을 바꿔야 합니다.
이 때 지정요소를 제대로 선택해서 가져오려면 문서 객체의 구조를 잘 이해하고 있어야 합니다.
이렇게 문서객체모델에서는 HTML의 모든 요소들을 문서 객체로 선택하여 자유롭게 속성을 바꿀 수 있고,
선택한 문서 객체에 원하는 스타일(CSS)을 적용할 수도 있습니다.

 

<정리>
  • HTML은 웹의 구조
  • CSS는 웹의 디자인
  • JS(자바스크립트)는 웹의 동작
  • DOM은 HTML문서 구조

 

솔룩스 2차 온라인 세미나에서는 Selenium을 사용해
자동으로 솔룩스 공식사이트에 접속하여 댓글다는 법을 알아보겠습니다.
이번 세미나는 코드를 실행할 때마다 시각적으로 바로바로 자동화 과정을 볼 수 있어
여러분이 조금 더 즐겁게 코딩하실 것 같습니다:)
그럼 본격적으로 기본 환경 세팅하러 가볼까요?

 


 

1.2 Pycharm으로 Selenium 설치

 

저번 세미나에서 pycharm을 설치하고 사용했던 거 기억나시나요?

이번 세미나에서도 pycharm을 사용하겠습니다.

먼저, pycharm 실행해주세요!

pycharm 실행

Selenium을 설치하기 위해

1. File -> Settings 들어가주세요!

Selenium 설치 과정 1

2. Settings 창에서 Project Interpreter -> 오른쪽에 있는 + 버튼 클릭!

Selenium 설치 과정 2

3. selenium 검색 -> Install Package 클릭

Selenium 설치 과정 3

4. 아래의 사진과 같이 Package 'selenium' installed successfully 라고 뜨면 selenium 설치 성공!

Selenium 설치 과정 4

 


1.3 Chrome Driver(크롬 드라이버) 설치

다음으로, 크롬드라이버를 설치해봅시다.

Selenium은 webdriver 라는 것을 통해 디바이스에 설치된 브라우저들을 제어할 수 있습니다.

이번 세미나에서는 Chrome을 사용해 볼 예정입니다.

먼저, 크롬의 버전에 맞게 크롬드라이버를 깔아야 하기 때문에

크롬 버전을 확인하기 위해 오른쪽 위의 점 세개 -> 도움말 -> Chrome 정보에 들어가봅시다.

크롬 버전 확인하는 방법

아래와 같이 크롬의 버전을 확인할 수 있습니다.
저같은 경우에는 버전이 81.0.4044.138 이네요.

크롬 버전 확인

크롬 드라이버 정식 사이트에 들어가봅시다.
http://chromedriver.chromium.org/아래와 같이 동일한 버전이 존재할 겁니다. 
참고로 버전이 없는 경우 Downloads 로 들어가면 있을겁니다.

각자의 버전에 맞는 것을 클릭해주시면 됩니다.
저는 버전이 81.0.4044.138 이니까 저 노란 형광펜 해놓은 곳을 클릭해보겠습니다 :)

클릭하면 ↑와 같이 나옵니다. 
각자의 OS 에 맞게 클릭해서 다운받아주시면 됩니다.

다운 받은 후,
위의 사진과 같이 저같은 경우 C드라이브 최상위에 놔뒀지만 
나중에 경로만 기억난다면 아무데나 놓으셔도 상관이 없습니다.

하지만 이번 세미나에서는 저의 코드를 따라오실 것이기 때문에 저와 같이 C드라이브 최상위에 놓아주세요:)

아무튼 chromedriver.exe를 저런식으로 압축풀어 놓아줍니다.

위의 사진처럼 로컬 디스크(C:)안에 chromedriver.exe 있는지 확인하고 
다음 페이지로 넘어가주세요:)

 

참고 자료 :  itblogpro.tistory.com/138

 

[Python][0] Selenium 셀레니움 시작하기

안녕하세요. 쿠과자입니다. 이번에는 Selenium , 즉 셀레니움에 대한 강좌를 시작해볼려고 합니다. 파이썬을 통해서 진행할 예정이므로, 파이썬 문법같은 기본적인건 넘어가며 진행하겠습니다. 참

itblogpro.tistory.com

 


Selenium Chrome Driver 테스트하기

2.1 Selenium Chrome Driver 실행

설치한 셀레니움 크롬 드라이버가 제대로 작동하는지 알아보겠습니다!
1. Pycharm 을 실행하셔서 File -> New project -> 프로젝트이름 selenium -> Create 해주세요.

셀레니움 크롬 드라이버 작동 확인 1

2. 만든 Selenium 프로젝트 -> New -> Python File -> 파일이름은 test 로 해서 새 파일 생성해줍니다.

셀레니움 크롬 드라이버 작동 확인 2-1
셀레니움 크롬 드라이버 작동 확인 2-2

Selenium은 webdriver api를 통해 브라우저를 제어합니다.

1. 우선 webdriver를 import 해줍니다.

파이썬에서 import 는 어떤 모듈과 패키지를 가져올 때 사용합니다.

모듈 : 특정 기능을 .py 파일 단위로 작성한 것
패키지 : 특정 기능과 관련된 여러 모듈을 묶은 것

random, turtle, math, pickle 등이 바로 모듈과 패키지인데요.
from import 형식은 패키지, 모듈에서 일부만 가져오는 것입니다.
즉, "selenium 모듈에서 webdriver 기능 가져오기" 라는 의미입니다. 

from selenium import webdriver # selenium 모듈에서 webdriver 기능 가져오기

2. 이제, driver 라는 이름의 webdriver 객체를 만들어줄 차례인데요. 

그 전에 객체의 개념에 대해 간단하게 설명하고 넘어가겠습니다.

객체란?

객체는 어떠한 속성값과 행동을 가지고 있는 데이터입니다.
파이썬의 모든것들(숫자, 문자, 함수 등)은 여러 속성과 행동을 가지고 있는 데이터입니다.

실제 세상에서도 object는 그 본연의 추상적인 개념만 가지고 있는것이 아니라, 다양한 정보와 행동을 가지고 있습니다.
자동차를 가지고 한번 생각을 해보겠습니다.
자동차를 원동기를 장치하여 그 동력으로 바퀴를 굴려서 철길이나 가설된 선에 의하지 아니하고 땅 위를 움직이도록 만든 차. 라는 사전적 의미만을 담는것이 아니라

내가 탈 수 있고, 앞으로 뒤로 움직이는 행동을 할 수 있고 차 앞뒤에 있는 차량번호 정보와 디자인과 제조사, 모델명 정보도 있습니다.
이러한 정보와 행위를 묶은 데이터를 하나의 자동차 객체로 볼 수 있습니다.

자동차라는 객체를 위와 같이 그림과 텍스트로 표현해보면,
자동차 그 자체로 정보가 있고(제조사 정보, 차량 번호, 차량 크기), 행위가 있습니다(앞으로 이동, 멈추기)
'뭐지? 당연한 소리를 하네?' 라고 생각하실 수 있습니다.

그럼 추상적인 개념으로 생각을 해보겠습니다.
문자 'a'는 파이썬에서 다음과 같이 객체화 시킵니다.

일부분만 나타냈습니다. 파이썬은 문자 객체에 더 많은 속성과 행동을 넣어둡니다.

파이썬에서는 단순하게 'a'라는 문자를 표현하는것으로 끝내는게 아니라, 'a'라는 문자 자체를 객체로 만들고 다양한 속성과 행동을 넣어뒀습니다.
이러한 객체들이 가진 속성중에 상태들은 value, 또는 attribute라고 부릅니다. 또 객체가 가진 행동들은 method(메소드)라고 부릅니다.

객체 설명 출처 :  https://wikidocs.net/20457

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

객체 개념이 조금 이해가 되셨나요? 그렇다면,

driver 라는 이름의 webdriver 객체를 생성하고 chromedriver.exe의 경로를 적어줍니다.

만약 driver를 파이어폭스의 webdriver를 사용할 경우 webdriver.Firefox() 를 호출하고, Edge의 webdriver를 사용할 경우 webdriver.Edge()를 호출합니다.
driver = webdriver.Chrome('chromedriver.exe 저장경로')

참고자료 : pythonstudy.xyz/python/article/404-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Selenium-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

예제로 배우는 파이썬 프로그래밍 - 파이썬 Selenium 사용하기

1. Selenium 소개 Selenium은 웹 브라우져를 컨트롤하여 웹 UI 를 Automation 하는 도구 중의 하나이다. Selenium은 Selenium Server와 Selenium Client가 있는데, 로컬 컴퓨터의 웹 브라우져를 컨트롤하기 위해서는 Se

pythonstudy.xyz


<전체 코드>

from selenium import webdriver # selenium 모듈에서 webdriver 기능 가져오기

driver = webdriver.Chrome('C:/chromedriver.exe') # 크롬 드라이버 실행하기

 


Pycharm 에서 Run(Alt+Shift+F10)을 눌러 결과를 확인합니다.
아래와 같이 'Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.' 라는 내용이 담긴 창이 열리면 
파이썬 코드에 의해 제어된 크롬창을 여는 것에 성공하신 겁니다.

이로써 파이썬으로 웹 브라우저 컨트롤을 할 수 있는 환경이 조성되었습니다!

 


네이버 자동으로 검색하기

3.1 특정 url로 브라우저를 켜보기

더보기

지금까지 잘 따라오셨다면, 이제 본격적으로 selenium의 자동화 기능을 공부해볼까요? 

먼저, 특정 url을 입력해 브라우저를 켜봅시다!

 

selenium은 driver객체를 통해 여러가지 메소드를 제공합니다.

객체의 함수를 우리는 메소드(methods)라고 부르는데요.

이해가 어려운 분들은 함수와 비슷한 것이라고 이해하시면 됩니다.

객체이름.메소드이름의 형태라, 지금부터 나오는 메소드들은 보통 driver.~~~방식으로 사용합니다.

드라이버를 조작하는 메소드 중, get(url) 은 웹 페이지를 읽어들입니다.

따라서

driver.get('url주소') 

형태로 작성해주시면 되고, naver를 들어가려면 아래와 같은 코드로 작성해주시면 됩니다:)


<전체 코드>

from selenium import webdriver

driver = webdriver.Chrome('C:/chromedriver.exe') # 크롬 드라이버 실행하기
driver.get('https://www.naver.com/') # 네이버 들어가기

네이버 첫 화면이 실행된다면 성공!


3.2 네이버 검색창에 자동으로 검색해보기

네이버 검색창에 숙명여자대학교 검색.mp4
0.50MB

위의 동영상을 시청하고 오셨나요?

지금부터는 위의 영상과 같이 네이버에 '숙명여자대학교'를 자동검색 해볼 것입니다.

아까 selenium은 driver객체를 통해 여러가지 메소드를 제공한다고 했었죠? 

페이지의 단일 element에 접근하는 메소드, 페이지의 여러 elements에 접근하는 메소드(대부분 element 를 elements 로 바꾸기만 하면 됩니다.), selenium으로 요소 조작, Selenium으로 드라이버 조작 등 여러가지 메소드가 있습니다.

 

아래의 표에 있는 메소드 말고도 다양한 메소드가 있는데,
그 내용은 [25기 세미나]Selenium으로 솔룩스 공식 사이트에 자동으로 댓글 달기(2) 에서 이어집니다~

 


'자동으로 네이버검색창에 검색하기'에서 주로 쓰이는 메소드

-Selnium으로 DOM요소 선택(요소를 찾지 못하면 NoSuchElementException 발생

처음요소를 추출

이름 설명
find_element_by_id(id) id속성으로 요소를 하나 추출
find_element_by_css_selector(query) css선택자로 요소를 하나 추출

-Selenium으로 요소 조작

이름 설명
click() 요소를 클릭
send_keys(value) 키를 입력

-Selenium으로 드라이버 조작

이름 설명
get(url) 웹 페이지를 읽어들임


 참고자료 : fenderist.tistory.com/168

[python] Selenium으로 스크래핑하기

[python] Selenium으로 스크래핑하기 ​ 1. Selenium으로 DOM요소 선택 - 요소를 찾지 못하면 NoSuchElementException 발생 이름 설명 처음요소를 추출 find_element_by_id(id) id속성으로 요소를 하나 추출 find_..

fenderist.tistory.com

 


 

그럼 저희는 지금부터 네이버에 '숙명여자대학교'를 자동검색하는 방법을 알아보겠습니다!

일단 네이버로 들어가서

오른쪽 위의 점 세개 -> 도구 더보기 -> 개발자 도구 를 클릭해주세요.

오른쪽 위의 점 세개 -> 도구 더보기 -> 개발자 도구

아래의 사진과 같이 빨간 네모안에 있는 아이콘을 선택해주시고, 검색창을 클릭해주세요.

그러면 해당 부분의 HTML을 알 수 있습니다. 

HTML 은 Hyper Text Markup Language의 약자로
웹 브라우저를 통해 사용자에게 보이는 웹 문서를 작성하기 위한 언어입니다.
여기서 Hyper Text(하이퍼 텍스트)란 
링크가 걸린 해당 컨텐츠(텍스트 및 이미지)를 클릭하게 될 경우 이동하게 만든 것으로 HTML은 하이퍼 텍스트의 정보를 표현하는 언어입니다.

너무 어렵게 생각하지 마시고, 웹사이트는 HTML 로 뼈대를 이루고 있다고 생각하시고 넘어가도 됩니다.

검색창을 구성하는 HTML을 가져와보면,

<input id="query" name="query" type="text" title="검색어 입력" maxlength="255" class="input_text" tabindex="1" accesskey="s" style="ime-mode:active;" autocomplete="off" onclick="document.getElementById('fbm').value=1;" value="">

이렇게 되어있습니다.

네이버는 친절하게도 검색창 id의 이름이 'query'로 HTML코드 처음부분에 보이네요!

그러면 저희는 아까 위에서 봤던 

find_element_by_id('id의 이름') 메소드를 이용하겠습니다.

*이것뿐만 아니라 다른 추출 메소드를 이용하셔도 무관합니다.

search = driver.find_element_by_id('query') # 네이버 검색창 찾기

추출한 네이버 검색창 요소를 변수 search에 저장합시다. 

브라우저상에서는 변화가 없겠지만 search 변수 안에 해당 element 정보가 입력되어서 해당 element를 제어할 수 있게 되었습니다!^^

실행해보면 위와 같이 검색창에 커서만 왔다갔다하는 결과창이 나올 것입니다.

검색하고 싶은 내용을 검색창에 보내볼까요? 

send_keys(value) 메소드를 사용하면 우리가 입력한 값을 보낼 수 있습니다.

send_keys('검색하고 싶은 내용')

네이버 검색창에 검색하고 싶은 내용을 보내는 것이기 때문에

아까 선언한 search 변수를 이용합니다.

search.send_keys('숙명여자대학교')

 

이렇게 검색창에 '숙명여자대학교' 를 입력했는데 클릭을 해야겠죠?

클릭은 click() 메소드를 이용합니다.

검색버튼의 HTML 코드를 아까처럼 선택해서 찾아보면,

<button id="search_btn" type="submit" title="검색" tabindex="3" class="btn_submit" onclick="window.nclick(this,'sch.action','','',event);" style="">
<span class="blind">검색</span>
<span class="ico_search_submit"></span>
</button>

이렇게 나오는데, 친절한 네이버는 또 클릭버튼의 id가 HTML코드 앞부분에서 등장하네요!^^

하지만 저는 여러분의 세미나 뒷부분 이해를 쉽게 돕기 위해 find_element_by_css_selector를 사용해보겠습니다.

*아까와 마찬가지로 find_element_by_id를 사용하시거나 다른 추출 메소드를 사용하셔도 무관합니다.

네이버 검색창 검색버튼의 해당 HTML코드에서 

오른쪽 마우스 커서 클릭 -> Copy -> Copy selector 하여 css선택자를 복사해줍니다.

복사한 css선택자는 다음과 같습니다.

#search_btn

이것을 find_element_by_css_selector('css선택자') 메소드에서

css선택자 부분에 붙여넣기합니다!

find_element_by_css_selector('#search_btn')

메소드 앞에 driver. 붙이는 거 잊지 않았죠?

아까 앞에서 객체이름.메소드이름 형태라 driver. 을 메소드 앞에 붙여야한다고 언급했습니다.

driver.find_element_by_css_selector('#search_btn')

이게 끝이 아닙니다. 

저렇게하면 검색버튼을 추출한 것이기 때문에 클릭이 되지 않습니다.

검색버튼 추출한 것을 click()해줘야 합니다.

따라서 .click()을 붙여줍니다!

driver.find_element_by_css_selector('#search_btn').click() # 네이버 검색창에 검색 버튼 클릭

 

<전체 코드>

from selenium import webdriver

driver = webdriver.Chrome('C:/chromedriver.exe') # 크롬 드라이버 실행하기
driver.get('https://www.naver.com/') # 네이버 들어가기
search = driver.find_element_by_id('query') # 네이버 검색창 찾기
search.send_keys('숙명여자대학교') # 네이버 검색창에 검색내용 입력
driver.find_element_by_css_selector('#search_btn').click() # 네이버 검색창에 검색 버튼 클릭

실행 결과

위와 같이 자동적으로 '숙명여자대학교'를 입력하고 클릭버튼까지 눌러졌다면 성공입니다!😊🎉👏

남은 세미나는 [25기 세미나] Selenium으로 솔룩스 공식 사이트에 자동으로 댓글 달기(2) 에서 이어집니다~!

여러분 끝까지 화이팅하세요!💪