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초 기다리라는 뜻인데
페이지가 로드 되기도 전에 실행되어 오류가난다 그것을 방지하기 위해 넣음
보내기까지 해보고 오류가 난다면....
아래 링크로 가보자
'Python > Selenium' 카테고리의 다른 글
[Selenium] 구글 드라이버 제어 명령어 (1) | 2024.10.12 |
---|---|
[Selenium] 메일 자동화 iframe 제어 방법 (0) | 2024.10.12 |
[Selenium] 로그인 자동화 프로그램 (캡차 우회) (0) | 2024.10.11 |
[Selenium] 동적 페이지 크롤링 하기! (0) | 2024.10.11 |
[Selenium] 셀레니움 기초 사용방법. (6) | 2024.10.11 |