바뀜

2,581 바이트 추가됨 ,  2022년 7월 22일 (금) 17:41
편집 요약 없음
49번째 줄: 49번째 줄:  
from webdriver_manager.chrome import ChromeDriverManager
 
from webdriver_manager.chrome import ChromeDriverManager
   −
browser = webdriver.Chrome(ChromeDriverManager().install())  # 이걸 브라우저로 사용한다.
+
드라이버객체(보통 driver) = webdriver.Chrome(ChromeDriverManager().install())  # 이걸 브라우저로 사용한다.
 
</syntaxhighlight>
 
</syntaxhighlight>
 
|-
 
|-
71번째 줄: 71번째 줄:  
|기다리기
 
|기다리기
 
|브라우저가 초기화될 때까지 기다린다.(보통 3초? 굳이 안써도 잘 작동하긴 한다.)
 
|브라우저가 초기화될 때까지 기다린다.(보통 3초? 굳이 안써도 잘 작동하긴 한다.)
|browser.implicitly_wait(초)
+
중간중간 쉬어야 할 땐 time모듈을 사용한다.
 +
|드라이버객체.implicitly_wait(초)
 
|-
 
|-
 
|웹페이지 읽기
 
|웹페이지 읽기
|
+
|해당 URL의 창을 연다.
|browser.get(url)
+
|드라이버객체.get(url)
 +
|-
 +
|창 최대화
 +
|창 크기를 최대화 한다.
 +
|드라이버객체.maximize_window()
 
|-
 
|-
 
|종료하기
 
|종료하기
 
|
 
|
|browser.quit()
+
|드라이버객체.quit()
 
|}
 
|}
   98번째 줄: 103번째 줄:  
|-
 
|-
 
|css셀렉터로 찾기
 
|css셀렉터로 찾기
|
+
|CSS셀렉터를 이용하여 요소를 찾을 수 있다.
|form = browser.find_element_by_css_selector("input.btn_global[type=submit]")
+
 
 +
'#id명', '.클래스명' 형태로.
 +
|target = browser.find_element_by_css_selector("input.btn_global[type=submit]")
 
|-
 
|-
 
|xpath로 찾기
 
|xpath로 찾기
 
|xpath를 사용하는 게 정말 쉽다.
 
|xpath를 사용하는 게 정말 쉽다.
 
개발자도구에서 해당 요소를 우클릭 한 후 copy>copy XPath 를 선택하면 복사 완료!
 
개발자도구에서 해당 요소를 우클릭 한 후 copy>copy XPath 를 선택하면 복사 완료!
|form = browser.find_element_by_xpath('xpath주소')
+
|target = browser.find_element_by_xpath('xpath주소')
 
|}
 
|}
   126번째 줄: 133번째 줄:  
|키 입력
 
|키 입력
 
|input 양식 따위에 내용을 입력한다.
 
|input 양식 따위에 내용을 입력한다.
 +
|target.send_keys(입력값)
 +
|-
 +
|특수키 입력
 +
|방향키, ALT, COMMAND, F1 등 특수키를 사용하고 싶을 때.
 
{| class="wikitable"
 
{| class="wikitable"
 
!특수키
 
!특수키
131번째 줄: 142번째 줄:  
|-
 
|-
 
|엔터
 
|엔터
|Keys.RETURN
+
|Keys.ENTER
 
|}
 
|}
|target.send_keys(입력값)
  −
|-
  −
|특수키 입력
  −
|방향키, ALT, COMMAND, F1 등 특수키를 사용하고 싶을 때.
   
|<syntaxhighlight lang="python">
 
|<syntaxhighlight lang="python">
 
from selenium.Webdriver.common.keys import Keys
 
from selenium.Webdriver.common.keys import Keys
</syntaxhighlight>위 모듈을 불러온 후 ARROW_DOWN, ALT, COMMAND, F1등을 입력한다.
+
</syntaxhighlight>위 모듈을 불러온 후 Keys.ARROW_DOWN, Keys.ALT, Keys.COMMAND, F1등을 입력한다.
 
|-
 
|-
 
|전송
 
|전송
188번째 줄: 195번째 줄:  
|browser.save_screenshot("경로.png")
 
|browser.save_screenshot("경로.png")
 
|}
 
|}
 +
 +
== 액션체인 ==
 +
특정 활동의 체인을 만든 후 한번에 실행한다.
 +
 +
키보드로 입력하는 것들을 모두 입력할 수 있다.<syntaxhighlight lang="python">
 +
from selenium.webdriver.common.action_chains import ActionChains
 +
 +
action = ActionChains(드라이버객체)  # 드라이버를 액션체인으로 제어한다.
 +
 +
action.send_keys('보낼 키').key_down(Keys.TAB).perform()  # Keys.TAB과 같은 사용은 셀레니움 모듈 안의 키 관련 모듈을 임포트해야 한다.
 +
# 데이터를 보낼 땐 send_keys로, 단순 조작을 하기 위해선 key_down을 사용한다. key_down으로도 입력은 가능하다.
 +
# 마지막에 perform()을 넣어주어 체인을 실행한다.
 +
action.reset_actions()  # 이게 없으면 다음번에 action을 다시 실행할 때 위에 작성한 action도 다시 실행된다.
 +
 +
# 보통 엑션 내용이 길어지면 \ 따위를 넣어 줄나눔을 하든가, 괄호 안에 넣어 한줄처럼 인식되게 한다.
 +
</syntaxhighlight><syntaxhighlight lang="python">
 +
action.pause(초)  # 액션 안에 쉬는 동작을 넣을 수도 있다.
 +
</syntaxhighlight>[동시에 누르기는 어떻게 할까?]<syntaxhighlight lang="python">
 +
target = driver.find_element_by_css_selector('.클래스명')
 +
 +
action.move_to_element(target).click()  # 해당 요소로 이동한다. 그리고 클릭도 가능하다.
 +
</syntaxhighlight>
    
= 다양한 사용법 =
 
= 다양한 사용법 =
235번째 줄: 264번째 줄:  
|}
 
|}
 
(로그인할 때 글자를 쓰게 하거나.. 이것저것 입력할 것을 요구하면... 못한다.)
 
(로그인할 때 글자를 쓰게 하거나.. 이것저것 입력할 것을 요구하면... 못한다.)
 +
 +
= 각종 편의 =
 +
셀레니움은 파이썬 위에서 돌아가는 것이기에, 파이썬이 종료되면 브라우저도 함께 종료되는데, 코드가 종료된 이후에도 브라우저를 사용하고 싶을 때가 있다. 그럴 땐 다음과 같이 옵션을 주면 된다.<syntaxhighlight lang="python">
 +
options = webdriver.ChromeOptions()
 +
options.add_experimental_option('detach', True)
 +
browser = webdriver.Chrome(브라우저경로, options=options)
 +
</syntaxhighlight>
 +
 +
= 에러 =
 +
 +
=== selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable ===
 +
존재하지만, 상호작용 할 수 없을 때. 보통 <code>.click()</code>을 수행했을 때 발생하는데, <code>.send_keys(Keys.ENTER)</code>로 우회할 수 있다. 이것도 안되면 클릭할 수 없는 요소를 클릭한 경우.
 
[[분류:웹 라이브러리]]
 
[[분류:웹 라이브러리]]