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>로 우회할 수 있다. 이것도 안되면 클릭할 수 없는 요소를 클릭한 경우. |
| [[분류:웹 라이브러리]] | | [[분류:웹 라이브러리]] |