본문 바로가기
Python/Selenium

[Selenium] 메일 자동화 새창 제어 방법

by 미눅스[멘토] 2024. 10. 12.
728x90

우선 완성된 코드이다 복붙하기 편하게 맨위로

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import pyperclip
import time

user_id = "Id"
user_pw = "Password"

# 드라이버 생성
driver = webdriver.Chrome()
driver.maximize_window()

# 1. 로그인 페이지 이동
time.sleep(2)

# 2. 아이디 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
pyperclip.copy(user_id)
id.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

# 3. 비밀번호 입력
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pyperclip.copy(user_pw)
pw.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

# 4. 로그인 버튼 클릭
driver.find_element(By.CSS_SELECTOR, ".btn_login").click()

# 만약 이상한 기기등록 팝업창이 나온다면 네이버 메인 페이지로 이동한다
# driver.get("https://nid.naver.com/")

# 드롭다운 메뉴 클릭
driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__my_menu___eF24q > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM").click()
time.sleep(1)

# 메일함 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__layer_menu_service___NqMyX > div.MyView-module__service_sub___wix9p > div.MyView-module__sub_left___AIWHR > a").click()

# 현재 열려있는 창 확인
driver.window_handles

# 새창으로 전환
driver.switch_to.window(driver.window_handles[1])
time.sleep(2)

# 메일쓰기 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write").click()

 

 

 


하나씩 풀어보면

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import pyperclip
import time

user_id = "Id"
user_pw = " Password "

# 드라이버 생성
driver = webdriver.Chrome()
driver.maximize_window()

# 1. 로그인 페이지 이동
time.sleep(2)

# 2. 아이디 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
pyperclip.copy(user_id)
id.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

# 3. 비밀번호 입력
pw = driver.find_element(By.CSS_SELECTOR, "#pw")
pyperclip.copy(user_pw)
pw.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

# 4. 로그인 버튼 클릭
driver.find_element(By.CSS_SELECTOR, ".btn_login").click()
 
# 만약 이상한 기기등록 팝업창이 나온다면 네이버 메인 페이지로 이동한다
# driver.get("https://nid.naver.com/")
 
# 드롭다운 메뉴 클릭
driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__my_menu___eF24q > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM").click()
 
# 메일함 버튼 클릭
driver.find_element(By.CSS_SELECTOR,"#account > div.MyView-module__layer_menu_service___NqMyX > div.MyView-module__service_sub___wix9p > div.MyView-module__sub_left___AIWHR > a").click()
 
# 메일쓰기 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write").click()
 
 

 

여기서 #메일 쓰기 버튼 클릭을 그냥 실행하면

 

위와 같은 오류가 나옴 그 이유는

# 메일함 버튼 클릭 을 실행할때 아래와같이 새창이 뜨게되어 해당창에서 메일쓰기 버튼을 못찾는 것이다

그렇다면 # 메일쓰기 버튼 클릭 을 클릭하기 전에 코드에서 가지고 있는 naver메인페이지에서  driver가 가지고 있는 페이지를 새창으로 바꿔주면 되는데 하기전에 아래 코드를 돌려본다 그럼 알수없는 해시코드 같은 이상한 코드가

EX) ['03BD2FE0ED8D13B33235EEA621FC5243', 'BB486F655B2E5B95B04DD5BFDA7D1EF3']  나오는데

이것이 현재 열려있는 창들을 식별하기위한 고유 값이다.

# 현재 열려있는 창
driver.window_handles

 

 

그래서 driver의 값을 2번으로 이동시키려면 index값을 1로 수정해주면 된다.

# 현재 열려있는 창
driver.window_handles[1]
# 새창으로 전환
driver.switch_to.window(driver.window_handles[1])

 

이렇게 전환을 시켜준다음 다시 # 메일쓰기 버튼 클릭 을 실행시켜 주면 아래처럼 정상 작동 하게된다.

 

 

그리고 중간에 time.sleep(2) 을 넣은것은 2초 기다리라는 뜻인데

페이지가 로드 되기도 전에 실행되어 오류가난다 그것을 방지하기 위해 넣음 

 

보내기까지 해보고 오류가 난다면....

아래 링크로 가보자

https://deahan.tistory.com/440