전체적인 모습
from selenium import webdriver
# 경로 설정
path = 'C:\chromedriver_win32\chromedriver.exe' # 자신의 드라이버 위치로 설정
url = '원하는 url 경로'
# 드라이버 설정
driver = webdriver.Chrome(path)
driver.implicitly_wait(10) # seconds 기다리기
# 경로 설정
driver.get(url)
driver.implicitly_wait(10) # seconds 기다리기
#드라이버 끝내기
driver.quit()
from selenium import webdriver
# 경로 설정
path = 'C:\chromedriver_win32\chromedriver.exe' # 자신의 드라이버 위치로 설정
url = '원하는 url 설정'
# 드라이버 설정
def drive_path(x, path):
global driver # 전역변수 선언하기
if x == 'chrome':
driver = webdriver.Chrome(path)
else:
print('driver 새로 설정하세요')
# url 설정
def url_move(url):
if isinstance(url, str):
driver.get(url)
else:
driver.get(str(url))
# 실행 부분
if __name__ == '__main__': # True
drive_path('chrome',path) # driver 설정
driver.implicitly_wait(10) # seconds 기다리기
url_move(url) # 설정한 url을 url_move에 넣기
driver.implicitly_wait(10) # seconds 기다리기
#드라이버 끝내기
driver.quit()
안에 들어가는 코드는 같고, 함수를 이용했는지 아닌지의 차이만 있다.
세부 설명
모듈 import 해오기
from selenium import webdriver
드라이버 위치와 url 주소 변수로 입력하기
# 경로 설정
path = 'C:\chromedriver_win32\chromedriver.exe' # 자신의 드라이버 위치로 설정
url = '원하는 url 설정'
webdriver 객체 만들어주기
driver = webdriver.Chrome(path)
로드될 때까지 기다리도록 시간 설정하기
driver.implicitly_wait(10) # seconds 기다리기
원하는 url로 브라우저 켜기
driver.get(url)
드라이버 끝내기
#드라이버 끝내기
driver.quit()
driver설정 후, 원하는 url로 접근하면 새 크롬 창이 뜨고, 해당 url주소로 들어가 진다.
브라우저를 열 때 옵션을 정해줄 수 도 있다.
윈도우 사이즈로 설정
options = webdriver.ChromeOptions()
options.add_argument('window-size=1920,1080')
driver = webdriver.Chrome(path, options=options)
헤들리스로 설정
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(path, options=options)
창 최대화로 설정
# 방법 1
options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
driver = webdriver.Chrome(path, options=options)
# 방법 2
driver.maximize_window()
뒤로 이동, 앞으로 이동
driver.back() #뒤로
driver.forward() #앞으로
탭 이동 방법
driver.window_handles[0] #브라우저 탭 객체를 리스트로 반환
# [0]은 첫번재 탭 의미
driver.switch_to.window(driver.window_handles[0]) #첫번째 탭으로 이동
driver.switch_to.window(driver.window_handles[1]) #두번째 탭으로 이동
driver.switch_to.window(driver.window_handles[2]) #세번째 탭으로 이동
탭 닫기
driver.switch_to.window(driver.window_handles[0]) #닫을 탭으로 이동
driver.close() #현재 탭 닫기
driver.quit() #브라우저 닫기
Selenium에서는 driver객체를 통해 여러 가지 메소드를 제공한다.
보통 driver. 방식으로 사용한다.
페이지의 단일 element에 접근하기
driver.find_element_by_xpath('/html/body/div[2]/~~~') # xpath 로 접근
driver.find_element_by_class_name('class_name') # class 속성으로 접근
driver.find_element_by_id('id') # id 속성으로 접근
driver.find_element_by_link_text('텍스트') # 링크가 달려 있는 텍스트로 접근
driver.find_element_by_css_selector('#account > div > a') # css 셀렉터로 접근
driver.find_element_by_name('name') # name 속성으로 접근
driver.find_element_by_partial_link_text('link_text') # 링크가 달려 있는 엘레먼트에 텍스트 일부만 적어서 해당 엘레먼트에 접근
driver.find_element_by_tag_name('tag_name') # 태그 이름으로 접근
driver.find_element_by_tag_name('tag_name').find_element_by_tag_name('a') # tag_name태그 하위태그인 a태그에 접근
driver.find_element_by_xpath('/html/body/div[2]~~~').find_element_by_name('name') # xpath로 접근한 엘레먼트의 안에 name이라는 속성을 가진 tag엘레먼트에 접근
페이지의 여러 elements에 접근하고 싶을 때, 보통 element를 elements로 바꾸면 된다.
조작 수행
- 클릭하기: .click()
- 키 입력하기: .send_keys()
.send_keys('텍스트 입력') 으로 텍스트를 입력할 수 있다.
명령어 | 기능 |
Keys.ENTER | 엔터 |
Keys.RETURN | |
Keys.SPACE | 스페이스 |
Keys.ARROW_UP | 방향키 (상하좌우) |
Keys.ARROW_DOWN | |
Keys.ARROW_LEFT | |
Keys.ARROW_RIGHT | |
Keys.BACK_SPACE | 지우기 (백스페이스) 지우기 (딜리트) |
Keys.DELETE | |
Keys.CONTROL | 자주 사용하는 기능키 (Ctrl, Alt, Shift, Tab) |
Keys.ALT | |
Keys.SHIFT Keys.TAB | |
Keys.SHIFT Keys.TAB | |
Keys.PAGE_UP | 스크롤 업 스크롤 다운 |
Keys.PAGE_DOWN | |
Keys.F1~9 | F1부터 F9 (F + 숫자) |
Keys.EQUALS | 기타 등등 |
Keys.ESCAPE | |
Keys.HOME Keys.INSERT | |
Keys.HOME Keys.INSERT |
단축키 입력 방법
from selenium.webdriver.common.keys import Keys
# 방법 1
# Ctrl+V
driver.find_element_by_id('id').send_keys(Keys.CONTROL + 'v')
# 방법 2
from selenium.webdriver import ActionChains
ActionChains(driver).key_down(Keys.CONTROL).send_keys('V').key_up(Keys.CONTROL).perform()
#위에서 driver 대신 엘리먼트를 입력해도 Ok
데이터 가져오기
class_name, name, tag_name, id, css_selector를 통해 데이터를 가져올 수 있다.
find_element를 이용하면 처음 것만 가져오고, find_elements를 이용하면 전체를 가져온다
ex.
#class_name을 통해 가져오기_처음값
title=driver.find_element_by_class_name('class_name입력')
print(title.text)
#tag_name을 통해 가져오기_전체값
titles=driver.find_elements_by_tag_name('tag 입력 (ex: h2)') # 해당 태그를 가진 데이터 전체를 가져와 titles에 저장
for title in titles:
print(title.text)
'연습 > 크롤링' 카테고리의 다른 글
[크롤링] 셀레니움_사용_1 (0) | 2022.04.15 |
---|---|
[크롤링] 셀레니움(Selenium)_다나와 크롤링하기 (0) | 2022.04.13 |
[크롤링] 셀레니움(Selenium)_설치방법 (0) | 2022.04.13 |