inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

프레임 전환

105

정기영

작성한 질문수 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

20

3

셀레니움 환경설정 오류

0

83

2

네이버 로그인 관련

0

388

2

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

0

107

1

크롤링 연습사이트 문의

0

125

2

선택자 질문

0

93

2

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

0

91

2

자동 로그인 질문

0

108

2

44강 제목, 링크

0

115

1

원하는 값이 없을 때

0

108

2

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

0

253

2

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

0

108

2

글목록 추출하기

0

112

2

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

0

101

2

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

0

83

2

강의 커리큘럼 질문

0

112

1

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

0

88

2

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

0

113

2

웹페이지 변경

0

85

2

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

1

73

2

수료증은 어떻게 받나요?

0

131

2

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

0

68

2

드라이버가 안 열려요

0

91

2

이거 해결방법 아시는 분?

0

124

2