1. selenium
(1) 웹 브라우저를 원격 조작할 때 사용하는 도구. 주로 웹 앱을 테스트하는데 이용하는 프레임워크
(2) Selenium은 webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어
(3) 브라우저를 직접 제어한다는 것은 JavaScript를 이용해 비동기적으로 혹은 뒤늦게 불러와지는 컨텐츠들을 scraping할 수 있다는 것이다.
(4) Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM 결과물에 접근이 가능하다.
(5) PC에서 설치되어 있는 웹 브라우저를 Selenium 라이브러리를 통해 컨트롤
(6) 예를 이용하면 자동으로 URL 열기를 할 수 있고, 크롤링, 문자 입력, 화면 캡처 등의 다양한 작업이 가능하다.
2. 설치
(1) anaconda prompt에 pip install selenium
(2) chrome/edge 버전 확인
1) chrome
2) edge
(3) 버전에 맞는 webdriver설치
1) chrome: ChromeDriver - WebDriver for Chrome (google.com)
2) edge: WebDriver - Microsoft Edge Developer
3. 실행 순서
(1) import selenium/from selenium import webdriver 로딩
(2) 불러오기
1) chrome: browser = webdriver.Chrome(executable_path=r"C:/webdriver.exe저장경로/chromedriver.exe")
2) edge: browser = webdriver.Edge(executable_path='C:/webdriver.exe저장경로/MicrosoftWebDriver.exe')
(3) 불러온 브라우저 실행: browser.get(url)
(4) 브라우저 닫기
1) browser.close()
2) browser.quit()
(5) Wait till Load Webpage(로딩 대기)
1) Implicit Waits(암묵적 대기)
2) 대기 설정
3) find로 객체를 찾을 때 검색이 되지 않으면 대기하는 시간 초 단위
① driver.implicitly_wait(time_to_wait=n)
② webdriver에 영구적으로 작용
③ 인자는 초 단위
④ Default 값 = 0
4) Explicit Waits(명시적 대기): time.sleep(secs) 함수를 사용
4. dom 탐색 메소드
(1) find_element_by_id: 요소의 속성 id로 object 탐색
(2) find_element_by_class_name: 요소의 속성 class로 object 탐색
(3) find_element_by_name: 요소의 속성 name으로 object 탐색
(4) find_element_by_xpath: xpath를 이용해서 object 탐색
(5) find_element_by_link_text: 하이퍼 링크의 텍스트로 object 탐색
(6) find_element_by_partial_link_text: 하이퍼 링크의 텍스트로 object 탐색
(7) find_element_by_tag_name: 요소의 태그 이름으로 object 탐색
(8) find_element_by_css_selector: css selector(sizzle)로 object 탐색
(9) 반환 값이 복수 개일 때는 첫 번째 결과만 반환
(10) 복수개의 결과를 모두 반환 받을 때는 위 메소드에서 element를 elements로 바꾸면 된다.
from selenium import webdriver as wd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import re
import pandas as pd
# 해시태그 검색어
keyword = "검색어"
count = "검색할 게시물 수"
# 사전 정보 정의
username = '인스타그램 아이디'
userpw = '인스타그램 비밀번호'
time.sleep(3)
# 해시태그 url 값
url = "https://www.instagram.com/explore/tags/{}/".format(keyword)
instagram_account =[]
instagram_tags = []
instagram_tag_dates = []
startTime = int(time.time())
# 인스타 로그인 URL
loginUrl = 'https://www.instagram.com/accounts/login/'
# Chrome drvier 실행
driver = wd.Chrome(executable_path=r"C:/work/chromedriver_win32/chromedriver.exe")
driver.get(loginUrl)
time.sleep(2)
# login
driver.find_element_by_name('username').send_keys(username)
driver.find_element_by_name('password').send_keys(userpw)
time.sleep(2)
driver.find_element_by_css_selector('button.sqdOP.L3NKy.y3zKF').click()
time.sleep(3)
5. 함수: Learn Python Programming - Python Tutorial (pythonbasics.org)참고
(1) 요소.send_keys(text/key값): 해당 요소에 text를 입력하거나 key관련 이벤트를 적용
1) 관련 keys의 값: https://selenium.dev/selenium/docs
2) key값 입력방법 ex)
① 요소.send_keys(Keys.RETURN)
② 요소.send_keys(RETURN = '\ue006')
3) 텍스트 입력 지우기
① Keys.BACKSPACE 또는 Keys.BACK_SPACE를 사용
② 전체 삭제: 요소.clear()
4) 파일 업로드: 파일을 받는 <input>을 선택한 뒤, send_keys(file_path)를 호출
(2) 클릭: 클릭할 요소.click()
(3) 액션에 관한 함수
selenium.webdriver.common.action_chains — Selenium 3.141 documentation
(4) 알람에 관한 함수
https://selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.alert.html
(5) select 요소에 관한 함수
selenium.webdriver.support.select — Selenium 3.141 documentation
(6) chrome의 설정 옵션에 관한 함수
selenium.webdriver.chrome.rcs — Selenium 3.141 documentation
# 셀레니움으로 임의이 사이트 화면 캡쳐 프로그래밍
from selenium import webdriver
try:
url = "http://www.daum.net"
browser = webdriver.Chrome(executable_path=r"C:/work/chromedriver_win32/chromedriver.exe")
browser.implicitly_wait(3)
browser.get(url);
browser.save_screenshot("daum_img.png")
browser.quit()
print('성공')
except Exception:
print('에러')
22. 자연어 처리(Natural Language Processing: NLP) (0) | 2021.05.10 |
---|---|
21. 데이터 시각화 (0) | 2021.05.07 |
19. schedule 모듈 (0) | 2021.05.07 |
18. json 모듈 (0) | 2021.05.07 |
17. BeautifulSoup (0) | 2021.05.06 |