티스토리 뷰
Selenium
-
자바스크립트를 많이 사용하는 웹 사이트(동적요소가 많은 웹사이트)는 웹 브라우저를 사용하지 않으면 동작을 제대로 확인할 수 없다.
-
selenium은 웹 브라우저를 원격 조작할 때 사용한다.
-
웹 브라우저를 조작하는 것과 같으므로 모든 웹 페이지에서 데이터를 스크레이핑 할 수 있다.
헤드리스 파이어폭스
-
화면이 없는 웹 브라우저
-
명령줄에서 웹 브라우저를 조작할 수 있다.
-
브라우저 내부에 출력되는 데이터를 추출하거나 스크린샷을 찍을 수 있다.
-
스크레이핑, UI테스트 자동화 등에 활용
Selenium + 파이어폭스 실행 환경
-
파이어폭스 설치
-
selenium 설치
-
파이어폭스 조작을 위한 Geckodriver 설치
-
압축 해제
-
폴더 이동
-
한글 폰트 설치
-
새로운 컨테이너 생성
웹 사이트를 이미지로 캡처해보기
-
네이버 메인 화면 캡처
from selenium.webdriver import Firefox, FirefoxOptions
url = "http://www.naver.com/"
# Firefox를 헤드리스 모드로 설정하는 옵션
options = FirefoxOptions()
options.add_argument('-headless')
# PhantomJS 드라이버 추출하기
browser = Firefox(options=options)
# URL 읽어 들이기
browser.get(url)
# 화면을 캡처해서 저장하기
browser.save_screenshot("Website.png")
# 브라우저 종료하기
browser.quit()
-
카페로 화면 이동 후 캡처
from selenium.webdriver import Firefox, FirefoxOptions
url = "http://www.naver.com/"
# Firefox를 헤드리스 모드로 설정하는 옵션
options = FirefoxOptions()
options.add_argument('-headless')
# PhantomJS 드라이버 추출하기
browser = Firefox(options=options)
# URL 읽어 들이기
browser.get(url)
e = browser.find_element_by_css_selector("a[data-clk='svc.cafe']")
e.click()
# 화면을 캡처해서 저장하기
browser.save_screenshot("Website.png")
# 브라우저 종료하기
browser.quit()
Selenium 으로 DOM 요소 선택
-
여러 개의 요소 중 처음 찾아지는 요소 추출
메소드 | 설명 |
find_element_by_id(id) | id 속성으로 요소 하나 추출 |
find_element_by_name(name) | name 속성으로 요소 하나 추출 |
find_element_by_css_selector(query) | css 선택자로 요소 하나 추출 |
find_element_by_xpath(query) | xpath를 지정해 요소 하나 추출 |
find_element_by_tag_name(name) | 태그 이름이 name에 해당하는 요소 하나 추출 |
find_element_by_link_text(text) | 링크 텍스트로 요소 추출 |
find_element_by_partial_link_text(text) | 링크의 자식 요소에 포함돼 있는 텍스트로 요소 하나 추출 |
find_element_by_class_name(name) | 클래스 이름이 name에 해당하는 요소를 하나 추출 |
-
모든 요소 추출
메소드 | 설명 |
find_elements_by_css_selector(query) | css 선택자로 요소 여러개 추출 |
find_elements_by_xpath(query) | xpath를 지정해 요소 여러개 추출 |
find_elements_by_tag_name(name) | 태그 이름이 name에 해당하는 요소 여러개 추출 |
find_elements_by_class_name(name) | 클래스 이름이 name에 해당하는 요소를 여러개 추출 |
find_elements_by_partial_link_text(text) | 링크의 자식 요소에 포함돼 있는 텍스트로 요소 여러개 추출 |
Selenium으로 요소 조작
메소드 또는 속성 | 설명 |
clear() | 글자를 입력할 수 있는 요소의 글자를 지움 |
click() | 요소 클릭 |
get_attribute(name) | 요소의 name에 해당하는 속성의 값 추출 |
is_displayed() | 요소가 화면에 출력되는지 확인 |
is_enabled() | 요소가 활성화돼 있는지 확인 |
is_selected() | 체크박스 등의 요소가 선택된 상태인지 확인 |
screenshot(filename) | 스크린샷 |
send_keys(value) | 키 입력 |
submit() | 입력양식 전송 |
value_of_css_property(name) | name에 해당하는 css속성 값 추출 |
id | 요소의 id 속성 |
location | 요소의 위치 |
parent | 부모 요소 |
rect | 크기와 위치 정보를 가진 딕셔너리 자료형 리턴 |
screenshot_as_base64 | 스크린샷 base64로 추출 |
screenshot_as_png | png형식의 바이너리로 추출 |
size | 요소의 크기 |
tag_name | 태그이름 |
text | 요소 내부 글자 |
Selenium 드라이버 조작
메소드 또는 속성 | 설명 |
add_cookie(cookie_dict) | 쿠키 값을 딕셔너리 형식으로 저장 |
back() / forward() | 이전 페이지 또는 다음페이지로 이동 |
close() | 브라우저 닫기 |
current_url | 현재 url추출 |
delete_all_cookies() | 모든 쿠키 제거 |
delete_cookie(name) | 특정 쿠키 제거 |
execute(command, params) | 브라우저 고유의 명령어 실행 |
execute_async_script(script, *args) | 비동기 처리하는 자바스크립트 실행 |
execute_script(script, *args) | 동기 처리하는 자바스크립트 실행 |
get(url) | 웹 페이지 읽기 |
get_cookie(name) | 특정 쿠키값 추출 |
get_cookies() | 모든 쿠키 값 딕셔너리 형식으로 추출 |
get_log(type) | 로그 추출 |
get_screenshot_as_base64() | base64 형식으로 스크린샷 추출 |
get_screenshot_as_file(filename) | 스크린샷 파일로 저장 |
get_screenshot_as_png() | png형식으로 스크린샷 바이너리 추출 |
get_window_position(windowHandle='current') | 브라우저 위치 추출 |
get_window_size(windowHandle='current') | 브라우저 크기 추출 |
implicitly_wait(sec) | 초단위로 지정하여 처리가 끝날때 까지 대기 |
quit() | 브라우저 닫기 |
save_screenshot(filename) | 스크린샷 저장 |
set_page_load_timeout(time_to_wait) | 페이지를 읽는 타임아웃 시간 지정 |
set_script_timeout(time_to_wait) | 스크립트의 타임아웃 시간 지정 |
set_window_position(x,y,windowHandle='current') | 브라우저 위치 지정 |
set_window_size(width, height, windowhandle='current') | 브라우저 크기 지정 |
title | 현재 페이지 타이틀 추출 |
'Machine Learning' 카테고리의 다른 글
크롤링과 스크레이핑 - cron을 이용한 정기적인 크롤링 (0) | 2020.09.19 |
---|---|
크롤링과 스크레이핑 - 웹 API로 데이터 추출 (0) | 2020.09.19 |
크롤링과 스크레이핑 - 로그인이 필요한 사이트에서 다운받기 (0) | 2020.09.17 |
크롤링과 스크레이핑 - 링크에 있는 것 내려받기 (0) | 2020.09.17 |
크롤링과 스크레이핑 - CSS 선택자 (0) | 2020.09.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- mapreduce
- gradle
- linux
- Allocation methods
- I/O Services of OS
- Flume
- Java
- 하둡
- I/O Mechanisms
- SQL
- vmware
- hadoop
- SPARK
- Disk Scheduling
- Replacement Strategies
- springboot
- aop
- maven
- 빅데이터 플랫폼
- 빅데이터
- File Protection
- HDFS
- Variable allocation
- oracle
- Spring
- jdbc
- JSON
- Disk System
- RAID Architecture
- Free space management
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함