본문 바로가기
PYTHON/파이썬_라이브러리&모듈

파이썬 Selenium 라이브러리2

by 시에라177 2022. 5. 13.

1.브라우저 생성하기

-옵션을 넣어 바로 닫히는 것을 방지하자

-send_keys는 별도의 모듈 임포트 필요없음. 다만 특수키는 Keys임포트 필요.

-selenium.webdriver.common.keys의 Keys는 특수키를 누를 수 있게 해준다.

-이벤트 사이사이마다 기다려야 하기 때문에 time모듈은 반강제적 사용

 

1-1드라이브로드(브라우저 객체는 정확한 용어사용이 아님)

옵션객체 = webdriver.ChromeOptions()

옵션객체.add_experimental_option(옵션내용)

브라우저 객체 = webdriver.Chrome('드라이버경로', options = 옵션객체)

 

2.브라우저에서 url열기

-웹페이지 읽어오기

브라우저객체.get(url)

-로딩대기하기(implicitly_wait()는 최대 대기시간을 지정하고 로딩이 끝날 때 까지 기다린다)

브라우저객체.implicitly_wait(10)

에러를 방지하기 위해 필히 사용.

 

3.요소 '선택'하기

브라우저객체.find_element_by_css_selector()

선택객체 = 브라우저객체.find_element_by_css_selector()

브라우저객체.find_element_by_css_selector().click()

by 뒷부분은 입맛에 맞게 변경가능하고, .click(), .send_keys()등으로 바로 클릭,입력가능. 선택한 요소를 따로 객체에 담을 수도 있다.

 

4.요소 조작하기.(=클릭하고 키보드 입력하기)(선택객체를 만들어 .찍고 클릭/입력하거나, 선택한고 바로 .찍어 클릭/입력할 수도 있음)

-클릭

.click()

-키보드 입력

.send_keys('입력할 내용')

-엔터키 입력(특수키 입력)

.send_keys(Keys.ENTER)

.send_keys(Keys.RETURN) -> Mac에서는 ENTER안먹히는 듯

 

-중간중간에 time.sleep으로 기다리면 오류 방지할 수 있음

ex)예시

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

#브라우저 생성
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True) #브라우저가 바로 닫히는 것을 방지하는 옵션
options.add_experimental_option("excludeSwitches", ['enable-logging']) #불필요한 메세지를 제거하는 옵션

browser = webdriver.Chrome('/usr/local/bin/chromedriver', options=options)

#웹사이트 열기
browser.get('https://www.naver.com')
browser.implicitly_wait(10)  #로딩이 끝날 때 까지 10초는 기다림

#쇼핑메뉴 클릭하기
browser.find_element_by_css_selector('a.nav.shop').click()
#클레스 선택자가 여러개인 경우(class = 'abc def'처럼 띄어쓰기 되어 있으면 abc클래스와 def클래스가 전부 적용된다는 뜻)
#abc.def로 선택하면 2개의 클래스를 모두 가진 태그 선택. 클래스 속성값에는 공백이 허용되지 않음.
#즉 HTML 요소에서 클래스 속성값은 공백으로 구분하여 여러개 지정할 수 있는 것.
#두 개 이상의 선택자가 적용된 태그라면 .abc.def로 찾아주어야함.
#click()은 클릭을 선택하는 명령어.

time.sleep(1) #잠깐 기다림
search = browser.find_element_by_css_selector('input.co_srh_input._input')
#선택자로 뒤에.N=a:SNB.search 추가하면 검색창 클릭이 안됨. 이유는 모름
search.click() #검색창 클릭

#검색어 입력
search.send_keys('아이폰 13')
search.send_keys(Keys.RETURN) #맥이라 그런가 ENTER말고 RETURN으로해야 먹힌다.