-웹 브라우저를 원격 조작하는 도구
-자동으로 URL을 열고 클릭 등이 가능
-스크롤, 문자 입력, 화면 캡처 등등
!pip install selenium
import requests
from selenium import webdriver
# 크롬 드라이버 경로 지정
driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get("https://www.naver.com/")
# 종료 필수
driver.quit()
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
# get 명령으로 접근하고 싶은 주소 지정
driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get("http://pinkwink.kr/")
get_window_size()
: 현재 창의 {가로, 세로} 반환get_window_position()
: 현재 창의 위치 좌표 {x, y} 반환get_window_rect()
: size, position의 값 반환# 현재 브라우저 창 크기
driver.get_window_size()
--> {'width': 1051, 'height': 798}
# 좌표값
driver.get_window_position()
--> {'x': 9, 'y': 9}
# size, position 값
driver.get_window_rect()
--> {'height': 798, 'width': 1051, 'x': 9, 'y': 9}
#스크롤 가능한 높이(길이)
driver.execute_script("return document.body.scrollHeight")
--> 666
#화면 스크롤 ->하단 이동
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
#화면 스크롤 ->상단 이동
driver.execute_script("window.scrollTo(0,0);")
# 스크린샷
driver.save_screenshot("../last_height.png")
--> True
-화면 페이지 지정 : xpath
# 특정태그 지점까지 스크롤 -->'AI 관련 최신글' 로 이동
from selenium.webdriver import ActionChains
some_tag = driver.find_element(By.XPATH,r'//*[@id="content"]/div[3]/div/h2') # 개발자도구로 원하는 태그 copy-->xpath
action = ActionChains(driver)
action.move_to_element(some_tag).perform()
# 입력 창에 글자 넣기
some_tag = driver.find_element(By.XPATH,'//*[@id="header"]/div[2]/input').send_keys("data science")
# 브라우저 창 크기 조절
# 현재 보이는 화면에서만 액션을 취할 수 있다.
driver.set_window_size(1920,1080)
# 화면 최대화
driver.maximize_window()
# 화면 최소화
# driver.minimize_window()
#검색창 단어 추가
driver.find_element(By.XPATH,'//*[@id="header"]/div[2]/input').send_keys("python")
#검색창 단어 지우기
driver.find_element(By.XPATH,'//*[@id="header"]/div[2]/input').clear()
# some_tag.clear()
# XPATH
xpath = '//*[@id="header"]/div[2]/button'
some_tag = driver.find_element(By.XPATH,(xpath))
some_tag.click()
# 클릭버튼 copy selector --> '#header > div.search.on > button'
driver.find_element(By.CSS_SELECTOR,'#header > div.search.on > button').click()
driver.back() #창 뒤로 가기
driver.forward()
from bs4 import BeautifulSoup
req = driver.page_source
#현재 웹드라이버가 연 화면의 page source,HTML이 출력
soup = BeautifulSoup(req, "html.parser")
elements = soup.select('#content')
elements[0].text
```python
'\n\npython\n(248)\n\n썸네일형\n리스트형\n\n\n\n\n\n\n\n\nROS2 혼자 공부하기 좋은 책 추천 - ROS2 혼자 공부하는 로봇 SW\n2022. 8. 31. 08:00\n제목을 "ROS2 혼자 공부하기 좋은 책"이라고 잡으니 첫 문장부터 창피합니다. 최근 몇 개월간 작업한 ROS2 기초 책을 출판했습니다. ...'
import requests
from selenium import webdriver
#페이지 접근
url = 'https://www.opinet.co.kr/searRgSelect.do'
driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get(url)
# 팝업창 화면 전환 후 닫아주기
driver.switch_to.window(driver.window_handles[-1])
driver.get(url)
import time
# 페이지 접근
url = 'https://www.opinet.co.kr/searRgSelect.do'
driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get(url)
time.sleep(2)
#팝업 창
driver.switch_to.window(driver.window_handles[-1])
#팝업창 닫아주기
driver.close()
#메인화면 창으로 전환
driver.switch_to.window(driver.window_handles[-1])
# 접근 url 다시 요청
driver.get(url)
url = 'https://www.opinet.co.kr/searRgSelect.do'
driver = webdriver.Chrome("../driver/chromedriver.exe")
driver.get(url)
driver.get(url)
# 지역: 시/도
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
sido_list_raw = driver.find_element(By.ID,"SIDO_NM0")
sido_list= sido_list_raw.find_elements(By.TAG_NAME,'option')
sido_list[17].text
-->'제주'
sido_list[1].get_attribute("value") #속성 값 가져오기
--> '서울특별시'
sido_names = []
for option in sido_list:
sido_names.append(option.get_attribute("value"))
sido_names
-->
['',
'서울특별시',
'부산광역시',
'대구광역시',
'인천광역시',
'광주광역시',
'대전광역시',
'울산광역시',
'세종특별자치시',
'경기도',
'강원도',
'충청북도',
'충청남도',
'전라북도',
'전라남도',
'경상북도',
'경상남도',
'제주특별자치도']
#한 줄로 쓰기
sido_names = [option.get_attribute("value")for option in sido_list]
sido_names[:5]
--> ['', '서울특별시', '부산광역시', '대구광역시', '인천광역시']
sido_names = sido_names[1:]
sido_names
--> ['서울특별시',
'부산광역시',
'대구광역시',
'인천광역시',
'광주광역시',
'대전광역시',
'울산광역시',
'세종특별자치시',
'경기도',
'강원도',
'충청북도',
'충청남도',
'전라북도',
'전라남도',
'경상북도',
'경상남도',
'제주특별자치도']
sido_list_raw.send_keys(sido_names[0])
# 구
gu_list_raw = driver.find_element(By.ID,'SIGUNGU_NM0') #부모 태그
gu_list = gu_list_raw.find_elements(By.TAG_NAME,'option') # 자식 태그
gu_names = [option.get_attribute("value") for option in gu_list]
gu_names = gu_names[1:]
gu_names[:5]
--> ['강남구', '강동구', '강북구', '강서구', '관악구']
gu_list_raw.send_keys(gu_names[15])
# 엑셀 저장
driver.find_element(By.XPATH,'//*[@id="glopopd_excel"]/span').click()
# 다른방법
# driver.find_element(By.CSS_SELECTOR,'#glopopd_excel > span').click()
# element_get_excel = driver.find_element(By.ID,'glopopd_excel')
# element_get_excel.click()
# for문으로 자동작업 설정
import time
from tqdm import tqdm_notebook
for gu in tqdm_notebook(gu_names):
element = driver.find_element(By.ID,'SIGUNGU_NM0')
element.send_keys(gu)
time.sleep(3)
element_get_excel = driver.find_element(By.XPATH,'//*[@id="glopopd_excel"]/span').click()
time.sleep(2)