본문 바로가기
연습/크롤링

[크롤링] 셀레니움(Selenium)_사용방법

by yejineee 2022. 4. 13.

전체적인 모습

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)