실습 전 할 것
1. 내 크롬브라우저에 맞는 크롬드라이버를 다운
2. 실습하고자 하는 파이썬 파일에 해당 크롬 드라이버를 넣고 실습시작
=> 실습(실행)파일과 동일한 루트에 넣으면 따로 루트 지정필요없이
=> driver = webdriver.Chrome()만으로 실행가능
다음 코드를 입력
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains # 쭉 연결할 수 있게함
import time
driver = webdriver.Chrome()
url = "https://google.com"
driver.get(url)
# driver.maximize_window() # 최대창 실행
action = ActionChains(driver) # action변수로 driver제어
로그인 버튼 클릭하기
클래스,id 둘 다 있기 때문에 클래스보다 우선하는 id를 사용해서 클릭하도록 다음 코드 추가
driver.find_element_by_css_selector('#gb_70').click()
로그인 창, 아이디 입력하기
action변수를 이용한 로그인 창에서 아이디입력하기
action.send_keys('아이디').perform() # 아이디 입력후 바로 실행가능위해 perform()을 썼음
action.reset_actions() # 중복입력방지, 사용된 action이 다시 입력되는 것을 방지함
로그인 창, 다음 버튼 클릭하기
다음버튼의 class는 위와 같다. 상위 클래스인 CwaK9을 써도 된다.
driver.find_element_by_css_selector('.CwaK9').click()
지금까지의 코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
url = "https://google.com"
driver.get(url)
# driver.maximize_window() # 최대창 실행
action = ActionChains(driver) # action변수로 driver제어
driver.find_element_by_css_selector('#gb_70').click() # 로그인 버튼 클릭
action.send_keys('study2025').perform() # 아이디입력
action.reset_actions()
driver.find_element_by_css_selector('.CwaK9').click() # 다음클릭
문제발생
다음버튼을 누를 순 있으나 진행이 불가함
로그인할 수 없습니다. 브라우저 또는 앱이 안전하지 않을 수 있습니다. 자세히 알아보기다른 브라우저를 사용해 보세요. 이미 지원되는 브라우저를 사용 중이면 화면을 새로고침한 후 로그인을 다시 시도해 보세요.
자동화 테스트 SW로 제어되는 브라우저라 안됨
구글 로그인, 비밀번호 입력 후 다음버튼입력하기
time.sleep(2) # 소요시간 예상 텀주기
driver.find_element_by_css_selector('.whs0nd.zHQkBf').send_keys('비밀번호') # 비밀번호 입력
driver.find_element_by_css_selector('.CwaK9').click() # 다음버튼클릭
time.sleep(2) # 소요시간을 고려해야 엉뚱한 클래스로 들어가지 않음
로그인 후, 지메일로 들어가기
driver.get('https://mail.google.com/mail/u/0/?tab=wm&ogbl#inbox')
time.sleep(2)
편지쓰기클래스를 활용한 편지쓰기
driver.find_element_by_css_selector('.T-I.J-J5-Ji.T-I-KE.L3').click()
time.sleep(1)
실행결과화면
위와 같은 새 메일 창이 뜨면, 다른 키 쓰지 않고 바로 수신자 입력이 가능하다.
즉, 액션체인으로 다룰수있다는것!
고로 action키를 써서 코드를 작성하자
수신자메일 입력하기
action.send_keys('수신자메일').key_down(Keys.TAB).key_down(Keys.TAB).send_keys('제목입니다.').key_down(Keys.TAB).send_keys('내용은 여기에').perform()
# tab키 2번 쓰기.
왜 tab이냐? tab키를 2번 누르면 수신자 입력란에서 제목 입력란으로 넘어가기 때문
# 이어서 send_keys('')를 통해 바로 제목입력하기
actionChain이 가능하기에 바로 이어서 쓴 것
# tab키를 누른 후 내용 작성 후 실행하기
전체코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
url = "https://google.com"
driver.get(url)
# driver.maximize_window() # 최대창 실행
action = ActionChains(driver) # action변수로 driver제어
driver.find_element_by_css_selector('#gb_70').click()
# 로그인 아이디 입력 후 다음 버튼 클릭
time.sleep(2) # 로그인시 시간 지연 될 수 있기에 텀주기
action.send_keys('로그인아이디').perform() # actionChain사용, 로그인 아이디입력
action.reset_actions() # 한 번 액션 후, 이 코드를 넣어줘야 앞서 사용한 action 재사용방지가능
driver.find_element_by_css_selector('.CwaK9').click()
# 비밀번호 입력 후 다음 버튼 클릭
time.sleep(2) # 소요시간 예상 텀주기
driver.find_element_by_css_selector('.whs0nd.zHQkBf').send_keys('비밀번호') # 비밀번호 입력
driver.find_element_by_css_selector('.CwaK9').click() # 다음버튼클릭
time.sleep(2) # 소요시간을 고려해야 엉뚱한 클래스로 들어가지 않음
# 지메일로 이동
driver.get('https://mail.google.com/mail/u/0/?tab=wm&ogbl#inbox')
time.sleep(2)
# 메일보내기 클릭
driver.find_element_by_css_selector('.T-I.J-J5-Ji.T-I-KE.L3').click()
time.sleep(1)
# 메일 내용 입력, 이메일, 제목, 내용
# 한줄코드가 긴 경우 ()를 통해 한줄처럼 인식가능
(
action.send_keys('수신자메일').key_down(Keys.TAB).key_down(Keys.TAB)
.send_keys('제목입니다.').key_down(Keys.TAB)
.send_keys('내용은 여기에')
.perform()
)
만약 내용을 쓸 때 다음줄에 입력을 하고 싶다면 다음과 같이 코드를 작성할 것
(
action.send_keys('수신자메일').key_down(Keys.TAB).key_down(Keys.TAB)
.send_keys('제목입니다.').key_down(Keys.TAB)
.send_keys('내용은 여기에').key_down(Keys.ENTER) # 다음 줄 입력이므로 ENTER
.key_down(Keys.SHIFT).send_keys('abcde') # SHIFT를 사용하여 대문자로. ABCDE가 작성됨
.key_up(Keys.SHIFT) # 다시 소문자로 전환
.perform()
)
여기서도 코드가 길기 때문에 pause(2)코드를 추가하여 잠시 텀을 주도록 하자.
(
action.send_keys('수신자메일').pause(2).key_down(Keys.TAB).key_down(Keys.TAB)
.send_keys('제목입니다.').pause(2).key_down(Keys.TAB)
.send_keys('내용은 여기에').pause(2).key_down(Keys.ENTER) # 다음 줄 입력이므로 ENTER
.key_down(Keys.SHIFT).send_keys('abcde') # SHIFT를 사용하여 대문자로. ABCDE가 작성됨
.key_up(Keys.SHIFT).pause(2) # 다시 소문자로 전환
.perform()
)
메일 보내기 버튼을 클릭하자
보내기 버튼과 관련된 여러 클래스명이 있는데, 이 중 보내기 버튼의 최상위 클래스명을 사용한다.
다음코드를 추가하자
send_button = driver.find_element_by_css_selector('.gU.Up') # 보내기 버튼을 변수를 지정하자
.move_to_element(send_button).click() # 이 코드를 쓰면 이 위치로 이동하여 클릭하게 된다.
최종 코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
url = "https://google.com"
driver.get(url)
# driver.maximize_window() # 최대창 실행
action = ActionChains(driver) # action변수로 driver제어
driver.find_element_by_css_selector('#gb_70').click()
# 로그인 아이디 입력 후 다음 버튼 클릭
time.sleep(2) # 로그인시 시간 지연 될 수 있기에 텀주기
action.send_keys('로그인아이디').perform() # actionChain사용, 로그인 아이디입력
action.reset_actions() # 한 번 액션 후, 이 코드를 넣어줘야 앞서 사용한 action 재사용방지가능
driver.find_element_by_css_selector('.CwaK9').click()
# 비밀번호 입력 후 다음 버튼 클릭
time.sleep(2) # 소요시간 예상 텀주기
driver.find_element_by_css_selector('.whs0nd.zHQkBf').send_keys('비밀번호') # 비밀번호 입력
driver.find_element_by_css_selector('.CwaK9').click() # 다음버튼클릭
time.sleep(2) # 소요시간을 고려해야 엉뚱한 클래스로 들어가지 않음
# 지메일로 이동
driver.get('https://mail.google.com/mail/u/0/?tab=wm&ogbl#inbox')
time.sleep(2)
# 메일보내기 클릭
driver.find_element_by_css_selector('.T-I.J-J5-Ji.T-I-KE.L3').click()
time.sleep(1)
send_button = driver.find_element_by_css_selector('.gU.Up') # 보내기 버튼을 변수를 지정하자
# 메일 내용 입력, 이메일, 제목, 내용
# 한줄코드가 긴 경우 ()를 통해 한줄처럼 인식가능
(
action.send_keys('수신자메일').pause(2).key_down(Keys.TAB).key_down(Keys.TAB)
.send_keys('제목입니다.').pause(2).key_down(Keys.TAB)
.send_keys('내용은 여기에').pause(2).key_down(Keys.ENTER) # 다음 줄 입력이므로 ENTER
.key_down(Keys.SHIFT).send_keys('abcde') # SHIFT를 사용하여 대문자로. ABCDE가 작성됨
.key_up(Keys.SHIFT).pause(2) # 다시 소문자로 전환
.move_to_element(send_button).click() # 이 코드를 쓰면 이 위치로 이동하여 클릭하게 된다.
.perform()
)
학습 : https://www.youtube.com/watch?v=2EBrICPZVLY
번외 : 네이버 자동 로그인 하기
'● 크롤링, 자동화 > Selenium' 카테고리의 다른 글
selenium 자동화 수집하기 (0) | 2020.11.08 |
---|---|
Anaconda 다운로드 받기, Jupyter Notebook 설치하기 (0) | 2020.11.08 |
네이버 카페 크롤 - 01 로그인 하기 (0) | 2020.08.30 |
[나도코딩] 가격비교 사이트, 나도 만들 수 있다! 잼있게 파이썬으로 하는 크롤러 제작 [Crawling] (0) | 2020.08.30 |
[김플 스튜디오] selenium : 크롬 검색 자동화 (0) | 2020.05.06 |