상세 컨텐츠

본문 제목

20. Selenium

Python

by evaseo 2021. 5. 7. 18:43

본문

1.    selenium

(1)     웹 브라우저를 원격 조작할 때 사용하는 도구. 주로 웹 앱을 테스트하는데 이용하는 프레임워크

(2)     Selenium webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어

(3)     브라우저를 직접 제어한다는 것은 JavaScript를 이용해 비동기적으로 혹은 뒤늦게 불러와지는 컨텐츠들을 scraping할 수 있다는 것이다

(4)     Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM 결과물에 접근이 가능하다.

(5)     PC에서 설치되어 있는 웹 브라우저를 Selenium 라이브러리를 통해 컨트롤

(6)     예를 이용하면 자동으로 URL 열기를 할 수 있고, 크롤링, 문자 입력, 화면 캡처 등의 다양한 작업이 가능하다.

 

2.    설치

(1)     anaconda promptpip 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: 요소의 속성 idobject 탐색

(2)     find_element_by_class_name: 요소의 속성 classobject 탐색

(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('에러')
    ​

 

'Python' 카테고리의 다른 글

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

관련글 더보기