inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

네이버 메일 자동화 - 02. iframe 전환 하는 법

프레임 전환

101

정기영

작성한 질문수 1

0

안녕하세요 강사님! 강의 너무 잘 만들어주셔서 감사합니다.

 

강사님과 같은 코드를 사용하여 iframe을 전환했는데 저는 자꾸 NoSuchElementException 오류가 뜨네요

 

위 부분 코드도 그대로 따라했는데 같이 올려봅니다!

 

#셀레니움 기본 템플릿 

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

user_id = "제 아이디"
user_pw = "제 비밀번호"

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

#페이지 이동  
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/")
# time.sleep(1)

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

#패스워드 입력 
pw = driver.find_element(By.CSS_SELECTOR, '#pw')
pyperclip.copy(user_pw)
pw.send_keys(Keys.CONTROL,'v')
# time.sleep(1)

#로그인버튼 클릭 
driver.find_element(By.CSS_SELECTOR,'#log\\.login').click()

#드롭다운 메뉴 클릭 
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.window_handles

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

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

#받는사람 
recieve = driver.find_element(By.CSS_SELECTOR, '#recipient_input_element')
recieve.send_keys('kiyoung3159@naver.com')

title = driver.find_element(By.CSS_SELECTOR,'#subject_title')
title.send_keys('음하하 아주 잘했어')

#프레임전환
iframe = driver.find_element(By.CSS_SELECTOR,"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe")
driver.switch_to.frame(iframe)

 

 

에러 코드는 아래와 같이 뜨네요!

 

NoSuchElementException                    Traceback (most recent call last)
Cell In[61], line 2
      1 #프레임전환
----> 2 iframe = driver.find_element(By.CSS_SELECTOR,"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe")
      3 driver.switch_to.frame(iframe)

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\webdriver.py:741, in WebDriver.find_element(self, by, value)
    738     by = By.CSS_SELECTOR
    739     value = f'[name="{value}"]'
--> 741 return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\webdriver.py:347, in WebDriver.execute(self, driver_command, params)
    345 response = self.command_executor.execute(driver_command, params)
    346 if response:
--> 347     self.error_handler.check_response(response)
    348     response["value"] = self._unwrap_value(response.get("value", None))
    349     return response

File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\errorhandler.py:229, in ErrorHandler.check_response(self, response)
    227         alert_text = value["alert"].get("text")
    228     raise exception_class(message, screen, stacktrace, alert_text)  # type: ignore[call-arg]  # mypy is not smart enough here
--> 229 raise exception_class(message, screen, stacktrace)

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe"}
...
	(No symbol) [0x00007FF7544255E0]
	(No symbol) [0x00007FF754414A7F]
	BaseThreadInitThunk [0x00007FFF14F8257D+29]
	RtlUserThreadStart [0x00007FFF16E4AF28+40]

 

무엇이 잘못되었는지 1시간 고민하다가 질문 올려봅니다!!

python 웹-크롤링

답변 1

0

스타트코딩

일단 iframe 선택자에는 문제가 없는데

 

실행할때, iframe으로 한번 전환된 다음에
다시 iframe 태그를 찾으려고 해서 오류가난거 아닐까요??

 

아니면 메일쓰기 작업을 하나씩할때마다 time.sleep을 적절히 부여해 보시기 바랍니다!

셀레니움 환경설정 오류

0

52

2

네이버 로그인 관련

0

282

2

안녕하세요 셀레니움에 대해서 질문

0

89

1

크롤링 연습사이트 문의

0

102

2

선택자 질문

0

74

2

'특정 요소가 나타날 때까지 스크롤' 부분 에러

0

78

2

자동 로그인 질문

0

90

2

44강 제목, 링크

0

107

1

원하는 값이 없을 때

0

91

2

크롤링한 링크가 엑셀로 들어가면 작동이 안되요

0

230

2

셀레니움 PDF자료는 받을 수 있나요

0

100

2

글목록 추출하기

0

100

2

메일 자동화 로그인 중복방지문자해결 오류 및 명시적 대기 질문

0

91

2

강의 노트가 어디에 있는건가요?

0

80

2

강의 커리큘럼 질문

0

102

1

조건문 else 사용하지 않는 이유

0

77

2

셀레니움으로 접근할 수 없는 경우

0

98

2

웹페이지 변경

0

75

2

자바스크립트로 태그 선택 시 질문입니다.

1

65

2

수료증은 어떻게 받나요?

0

122

2

class명을 활용하여 선택자를 만들지 않는 경우..?

0

61

2

드라이버가 안 열려요

0

79

2

이거 해결방법 아시는 분?

0

121

2

네이버 지식인 크롤링..

0

202

2