<초보코딩님 유투브로 공부하며 정리하였습니다>
0. 크롬 드라이버 설치
- 구글에서 "크롬 드라이버 설치" 검색 후,
- 내 크롬과 같은 버전으로 다운로드 하기
- 내 크롬 버전은 크롬 오른쪽 위 점 세개 버튼을 누른 후
- 설정 -> 크롬 정보를 누르면 확인할 수 있다
- 내 크롬 버전은 크롬 오른쪽 위 점 세개 버튼을 누른 후
- 현재 내 크롬 버전은 92.xxx 버전임
window 버전 다운로드 후,
압축 풀면
chromedriver.exe 실행 파일이 있음
이 exe 파일을 편한 위치 (ex: D:\temp)에 옮기기
1. selenium 설치
pip install selenium
2. 셀레늄에서 webdriver 모듈 import 후
제어하기 위한 크롬창을 만들기 위해
크롬 드라이버 가져오기
from selenium import webdriver
driver = webdriver.Chrome("D:/temp/chromedriver.exe")
이렇게 하면 크롬 창이 하나 뜨고
Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다. 라는 메시지가 보인다 !
3. 초보코딩님은 마스크알리미 사이트로 예제를 수행하셨는데,
마스크 알리미 홈페이지 이제 없어졌.......
그래서 나는 네이버 지도로 예제를 수행했다!
접속할 url 입력 해주기
url = 'https://m.map.naver.com/'
driver.get(url)
4. 셀레늄은 pyautogui 보다
각각을 요소로 잡을 수 있어서 매우 편리하다!
F12를 누르면 이 홈페이지가 어떤 요소로 이루어져 있는지가 다 나옴!
5. F12를 통해 원하는 태그를 가리킬 수 있음
1) 네이버 지도에 들어간 후에,
2) 입력란을 클릭해서
3) 강남역을 치고
4) 돋보기 버튼 클릭하는 게 목표!
- 장소, 주소 검색의 요소 가져오기
<div class="Nsearch _searchKeywordView _searchGuide" style=""> <div class="Nsearch_inner"> <div class="Nsearch_box"> <div class="Nsearch_box_inner"> <span class="Nbox_text _textPanel"> <input type="text" value="" placeholder="장소, 주소 검색" title="검색어 입력" class="Nbox_input_text _keyword" autocomplete="off"> </span> <span class="Nbox_tool"> <button type="button" class="Nbox_button Nbox_delete _clear" style="display:none;"><span class="Nicon_delete">검색어 삭제</span></button> <button type="submit" class="Nbox_button Nbox_search _search"><span class="Nicon_submit">검색</span></button> </span> </div> </div> </div> </div>
- //태그[@속성="속성값"] 로 태그를 가져오고
- 이 문자열을 이용해서, 요소를 잡기 위해서는 driver.find_element_by_xpath를 사용
- 오류 안나면 element를 잘 잡은 거!
- 오류 없이 끝나면, 이 요소를 잘 잡았다는 의미임
xpath = '//span[@class="Nbox_text _textPanel"]'
text_panel = driver.find_element_by_xpath(xpath)
text_panel.click()
- 강남역 입력하기
xpath2 = "//input[@class='Nbox_input_text _search_input']" input_window = driver.find_element_by_xpath(xpath2) input_window.send_keys("강남역")
- 검색 버튼 클릭
- 검색 버튼의 element 찾기
<span class="Nbox_tool"> <button type="button" class="Nbox_button Nbox_delete _clear" data-nclicks="scw.kwdx" style="display: inline-block;"> <span class="Nicon_delete">검색어 삭제</span></button> <button type="submit" class="Nbox_button Nbox_search _search"> <span class="Nicon_submit">검색</span></button> </span>
- 검색어 삭제 버튼의 element는 잘 잡히는데,
검색 버튼의 element는 안 잡힘 - find_elements_by_xpath로 검색해보니,
span 태그의 class 속성을 가진 element가 두개임 - 인덱스로 접근하는 방법이, print는 가능한데 driver.find_element_by_xpath로는 click이 안되길래
- 결국 검색 버튼의 element를 찾을 수가 없어서,
강남역 하고 enter 치는 걸로 대체함
xpath2 = "//input[@class='Nbox_input_text _search_input']" input_window = driver.find_element_by_xpath(xpath2) input_window.send_keys("강남역\n")
- 검색 버튼의 element 찾기
Full code
from selenium import webdriver
driver = webdriver.Chrome('D:\chromeDriver\chromedriver.exe')
url = 'https://m.map.naver.com/'
driver.get(url)
xpath = '//span[@class="Nbox_text _textPanel"]'
text_panel = driver.find_element_by_xpath(xpath)
text_panel.click()
xpath2 = "//input[@class='Nbox_input_text _search_input']"
input_window = driver.find_element_by_xpath(xpath2)
#input_window.send_keys("강남역\n")
input_window.send_keys("강남역")
xpath3 = "/html/body/div[4]/div[1]/div[1]/form/div/div[2]/div/span[2]/button[2]"
click_btn = driver.find_element_by_xpath(xpath3)
click_btn.click()
trouble shooting
1. 제대로 했는데, 클릭이 안될 경우
A. 배율이 100%로 제대로 되어있는지 확인하기
2. 제대로 썼는데, 요소를 못잡는 경우
A1. 일단은 오타가 혹시 없는지 확인하기
A2. 요소의 이름이 독립적인지 확인하기
find_elements_by_xpath를 썼을 때에 여러개가 나올 수 있음
xpath = '//button[@class="closeBtn"]'
driver.find_elements_by_xpath
그래서 속성, 속성값이 여러개 있을 경우,
만약 태그에 id라는 속성이 있으면 가능한 id를 잡아서 하는 걸 추천!
id 속성 값에 어떤 값을 넣게되면
다른 태그에서 똑같은 속성 값을 사용할 수 없게 되기 때문에,
id로 정한 이름은 독립적임. (input 요소를 잡기 편해짐)
A3. 오른쪽 단추 누르고 -> copy -> full Xpath를 누르면
/html/body/div[4]/div[1]/div[1]/form/div/div[2]/div/span[2]/button[2] 이런 xpath가 나오고,
find_elements_by_xpath로 했을 때에 독립적인 하나의 element인 것처럼 나옴
하나만 나오는 게 확인되면
new_xpath = "/html/body/div[4]/div[1]/div[1]/form/div/div[2]/div/span[2]/button[2]"
click_btn = driver.find_element_by_xpath(new_xpath)
click_btn.click()
클릭까지 확인할 수 있다 !!
3. 실행이 잘 안될 경우
A. 각 라인 사이사이에 time delay 주기
'python 공부 > 매크로 만들기' 카테고리의 다른 글
[파이썬 매크로 만들기] #08. Selenium으로 KTX 취소표 예매하는 매크로 만들기 (2) | 2021.08.09 |
---|---|
[파이썬 매크로 만들기] #06. 화면 인식 기반 (0) | 2021.08.09 |
[파이썬 매크로 만들기] #05. 화면 색깔 인식하기 (0) | 2021.08.09 |
[파이썬 매크로 만들기] #04. 매크로 시작 단축키 만들기 (1) | 2021.08.09 |
[파이썬 매크로 만들기] #03. PYAUTOGUI로 네이버 로그인 매크로 만들기 (0) | 2021.08.09 |