▷ 오늘 학습 계획: EDA 강의(유가분석 1~2)
selenium documentation
selenium python document
웹 브라우저를 원격 조작하는 도구
자동으로 URL을 열고 클릭 등이 가능
스크롤, 문자의 입력, 화면 캡처 등등
Python 모듈도 설치하고 크롬 드라이버도 받아야 한다.
- conda install selenium
- chrome 버전 확인 후, chromedriver 설치
Beautiful Soup 만으로 해결할 수 없는 것
접근할 웹 주소를 알 수 없을 때
자바스크립트를 사용하는 웹페이지
웹 브라우저로 접근하지 않으면 안될 때
from selenium import webdriver #from selenium.webdriver.common.by import By driver = webdriver.Chrome(executable_path='../driver/chromedriver.exe') #크롬 드라이버의 경로 지정('executable_path='문구 생략 가능) driver.get('https://pinkwink.kr') #접근하고 싶은 주소 지정 driver.quit()
화면 크기 설정
driver.set_window_size(600,600) driver.maximize_window() # 최대 크기 설정 driver.minimize_window() # 최소 크기 설정
새로 고침
driver.refresh()
뒤로가기
driver.back()
앞으로가기
driver.forward()
클릭
from selenium.webdriver.common.by import By first_content = driver.find_element(By.CSS_SELECTOR, '#content > div.cover-masonry > div > ul > li:nth-child(1)') first_content.click()
새로운 탭 생성
driver.execute_script('window.open("https://www.naver.com")')
탭 이동
driver.switch_to.window(driver.window_handles[0]) len(driver.window_handles) #이동할 수 있는 탭의 개수
탭 닫기
driver.close() #열려있는 탭 하나씩 닫기 driver.quit() #전체 탭 모두 종료
스크롤 가능한 높이(길이)
- 자바스크립트 코드 실행
driver.execute_script('return document.body.scrollHeight')
화면 스크롤 이동
# 하단으로 이동 driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') # 상단으로 이동 driver.execute_script('window.scrollTo(0,0);')
현재 보이는 화면 스크린샷 저장
driver.save_screenshot('./last_height.png') # 정상적으로 실행되면 'True'라고 출력되면서 스크린샷이 저장됨
특정 태그 지점까지 스크롤 이동
from selenium.webdriver import ActionChains some_tag = driver.find_element(By.CSS_SELECTOR, '#content > div.cover-list > div > ul > li:nth-child(1)') action = ActionChains(driver) action.move_to_element(some_tag).perform()
1) CSS_SELECTOR
from selenium import webdriver from selenium.webdriver.common.by import By
driver = webdriver.Chrome('../driver/chromedriver.exe') driver.get('https://naver.com')
키 입력: .send_keys( )
keyword = driver.find_element(By.CSS_SELECTOR, '#query') keyword.clear() #원래 작성된 검색어 삭제 keyword.send_keys('딥러닝')
search_btn = driver.find_element(By.CSS_SELECTOR, "#search_btn") search_btn.click()
2) XPATH
'//': 최상위
'*': 자손 태그
'/': 자식 태그
'div[1]': div 중에서 첫번째 태그driver.find_element(By.XPATH, '//*[@id="query"]').send_keys('xpath') driver.find_element(By.XPATH, '//*[@id="search_btn"]').click() driver.quit()
from selenium import webdriver from selenium.webdriver.common.by import By
driver = webdriver.Chrome('../driver/chromedriver.exe') driver.get("https://pinkwink.kr")
# 1. 돋보기 버튼을 선택 from selenium.webdriver import ActionChains search_tag = driver.find_element(By.CSS_SELECTOR, ".search") action = ActionChains(driver) action.click(search_tag) action.perform() # 2. 검색어 입력 driver.find_element(By.CSS_SELECTOR, "#header > div.search > input[type=text]").send_keys('딥러닝') # 3. 검색 버튼 클릭 driver.find_element(By.CSS_SELECTOR, "#header > div.search.on > button").click()
찾은 요소의 속성 값 가져오기
element.get_attribute('속성이름')
현재 화면의 html 코드 가져오기
driver.page_source from bs4 import BeautifulSoup req = driver.page_source soup = BeautifulSoup(req, "html.parser") soup.select('.post-item')
contents = soup.select('.post-item') len(contents) contents[2] driver.quit()
▷ 내일 학습 계획: EDA 강의(유가분석 3~5)