본문 바로가기
[ 빅데이터 ]

[빅데이터] 리눅스 / Selenium 설치 및 사용법

by 히앤님 2020. 10. 23.
반응형
SMALL

Selenium이란?

WebBrowser(Chrome, Firefox, IE, Safari 등등)를 조작해주는 프레임워크(Framework).

일반적으로 웹 앱을 테스트할 때 주로 사용하는 프레임워크이다.

 

webdriver(조작을 원하는 browser별로 실제 파일이 다름)라는 API를 이용해 브라우저를 제어할 수 있다. 브라우저를 직접 동작시킨다는 것은 JavaScript가 동작하면서 비동기적으로 서버로부터 콘텐츠를 가져오거나 숨겨져 있는 콘텐츠를 열거나 하는 등의 작업을 수행함을 의미한다. webdriver는 http프로토콜로 명령을 직접 날리고 확인 할 수 있다.

 

Selenium 라이브러리에는 브라우저 조작이 가능한 다양한 기능이 존재하며, JS로 렌더링이 완료된 후의 DOM결과물에 접근이 가능하다. 우리가 requests에서 사용했던 .text의 경우 브라우저에서 '소스보기'를 한 것과 같이 동작하여, JS등을 통해 동적으로 DOM이 변화한 이후의 HTML을 보여주지 않기 때문에 Selenium은 JavaScript에 의해 동적으로 생성되는 사이트의 데이터를 크롤링할 때 매우 유용하게 사용되는 스크래핑 도구이다.


설치방법(Python기준)

 

1. 현재 설치된 패키지 정보들을 보자. 파이어폭스 찾아봐!

sudo apt --installed list | grep firefox

 

 

2. 셀레니움 설치

pip install selenium

 

 

3. 현재 환경설정

현재 파이참 개발은 myapps라는 환경에서 하고 있으므로 이동.

주피터를 위해 base에도 설치해주고, myapps에서 한번 셀레니움을 더 설치해준다.

conda activate myapps

myapps에도 설치

 

4. 설치하고 tar 파일 압축 풀기

wget https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz

tar xvzf geckodriver-v0.26.0-linux64.tar.gz

압축풀림

 

5. 파일 경로 이동

sudo mv geckodriver /usr/local/bin/ 

 

 

6. testdaum.py 파일을 생성한다.

다음 계정으로 로그인 하는 실험을 해보도록 하자.

user와 pass에 다음 계정 아이디와 비밀번호를 넣고 로그인해보자.

from selenium.webdriver import Firefox, FirefoxOptions

USER = ""
PASS = ""


# Firefox 실행하기
browser = Firefox()
# 로그인 페이지에 접근하기
url_login = "https://accounts.kakao.com/login?continue=https%3A%2F%2Flogins.daum.net%2Faccounts%2Fksso.do%3Frescue" \
            "%3Dtrue%26url%3Dhttps%253A%252F%252Fwww.daum.net%252F "
browser.get(url_login)
print("로그인페이지에 접근합니다")
# 텍스트 박스에 아이디와 비밀번호 입력하기
e = browser.find_element_by_id("id_email_2")
e.clear()
e.send_keys(USER)
e = browser.find_element_by_id("id_password_3")
e.clear()
e.send_keys(PASS)

# 입력양식 전송해서 로그인하기 -find_element_by_css_selector("")
form = browser.find_element_by_css_selector("button.btn_g.btn_confirm.submit")
# form.submit()
form.click()
print("로그인버튼 클릭")
browser.implicitly_wait(3)
browser.get("http://www.naver.com")

# browser.quit()

 

7. 결과

알아서 입력한 아이디 비밀번호가 입력되고 로그인버튼이 눌러진다.

앗... 카카오로 통합되었더니 로봇 인증을 해야해서ㅠ로그인이 되지는 않는다.

하지만 제어는 성공적!

네이버는 보안이 철저해서 다음으로 했으나ㅠ로봇 인증때문에 더 어렵게 되었다ㅠ

 

8. 스크린샷 및 종료

브라우저를 스크린샷을 찍어서 저장할 수도 있다. 꼭 브라우저 꺼주고 나가야 과부하가 생기지 않는다.

browser.save_screenshot("result.png")
browser.quit()

 

 



[ 주피터 노트북 : 웹스크래핑으로 이미지 다운로드하기 ]


 

1. url을 입력해서 화면 캡처하고 저장하기

네이버 홈페이지를 캡처하고 저장해보자.

headless로 하게되면 상단의 메뉴바가 없이 캡쳐된다.

폴더에 저장되었다.
저장된 사진

 

▼ 전체 코드

더보기

from selenium.webdriver import Firefox, FirefoxOptions
# 파이어 폭스를 헤드리스 모드로 설정하는 옵션(Headless:창이 없는)
options = FirefoxOptions()
# url 설정
url = "http://www.naver.com"
# 입력받을 인자값 등록
options.add_argument('--headless')
# 파이어폭스 드라이버 추출
browser = Firefox(options=options)
# url 읽어들이기
browser.get(url)
#화면을 캡쳐해서 저장하기
browser.save_screenshot("Website.png")
#종료
browser.quit()

 

 

 

2. 인스타그램에서 강아지 사진 가져오기

1) 게시물 갯수를 크롤링해보자.

F12 눌러서 class이름 가져오기
클래스 이름
클래스 이름을 입력해서 해당 태그를 가져온다.

▼ 전체 코드

더보기

from selenium.webdriver import Firefox, FirefoxOptions
import time

#헤드리스모드
options = FirefoxOptions()
options.add_argument('--headless')
#드라이버 추출
browser = Firefox(options=options)
#주소 설정
url = "https://www.instagram.com/explore/tags/%EA%B0%95%EC%95%84%EC%A7%80/"
# url 읽어들이기
browser.get(url)

# 옵션 설정하기
time.sleep(3)
#총 이미지 갯수를 띄우는 텍스트의 클래스 이름 입력
total_cnt = browser.find_element_by_class_name('g47SY').text
print('총 검색된 강아지 이미지 수 : ', total_cnt)

 

 

2) 강아지 사진 저장

주피터 workspace에 downImg > dog 경로로 사진을 저장할 폴더를 생성해주었다. 

F12 눌러서 링크 확인
클래스 이름 확인
이미지 다운로드
이미지가 잘 저장되었다.

 

▼ 전체 코드

더보기

# 이미지 읽어서 저장하기
imgs = browser.find_elements_by_css_selector('img.FFVAD')

#이미지 가져오기
result = []
for img in imgs:
    if 'http' in img.get_attribute('src'):
        result.append(img.get_attribute('src'))

from urllib.request import urlretrieve
# 디운로드
for index,link in enumerate(result):
    print(index, ":",link)
    urlretrieve(link, 'downImg/dog/dog_'+str(index)+'.jpg')
print('success!')

 


3. [과제]구글에서 입력한 동물 이미지를 수집해서 자동으로 저장하는 프로그램 개발하기


 

반응형
LIST

댓글