인프런 커뮤니티 질문&답변

헉근뎅님의 프로필 이미지
헉근뎅

작성한 질문수

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

네이버 메일 자동화 - 01. 새로운 창 제어 하는 법

네이버 메일 자동화편 드롭다운 메뉴클릭 부분

작성

·

207

·

수정됨

0

수업 듣다가 드롭다운 메뉴 클릭 부분에서 NoSuchElementException 오류가 뜨면서 메일 드롭다운 클릭이 안됩니다.

왜이런 걸까요??

#셀레니움 기본 템플릿
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pyperclip
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

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

#페이지 이동
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/")
time.sleep(0.5)
# 아이디 입력
id = driver.find_element(By.CSS_SELECTOR, "#id")
pyperclip.copy(user_id)
id.send_keys(Keys.CONTROL, 'v')
time.sleep(0.5)

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

# 로그인 버튼 클릭
driver.find_element(By.CSS_SELECTOR, "#log\\.login").click()
driver.get("https://www.naver.com/")
time.sleep(1)
#드롭다운 메뉴 클릭
driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__my_menu___eF24q.MyView-module__is_open____qWM1 > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM").click()

오류내용

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
Cell In[34], line 35
     33 time.sleep(1)
     34 #드롭다운 메뉴 클릭
---> 35 driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__my_menu___eF24q.MyView-module__is_open____qWM1 > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM").click()

File c:\Users\LEGION\AppData\Local\Programs\Python\Python312\Lib\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 c:\Users\LEGION\AppData\Local\Programs\Python\Python312\Lib\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 c:\Users\LEGION\AppData\Local\Programs\Python\Python312\Lib\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":"#account > div.MyView-module__my_menu___eF24q.MyView-module__is_open____qWM1 > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM"}
...
	(No symbol) [0x00007FF723ECECA2]
	(No symbol) [0x00007FF723EBE16F]
	BaseThreadInitThunk [0x00007FFB1DF87344+20]
	RtlUserThreadStart [0x00007FFB1EA3CC91+33]
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

답변 3

0

driver.implicitly_wait(10)

이부분 추가해주니까 되네요

저도 여기서 1시간 가량 막혀서 찾아보다가 해결했습니다

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

선택자가 제대로 copy 되었다면,

네이버 메인 페이지로 완전히 이동하기 전에, 태그를 찾으려고 해서 발생한 오류일 겁니다.

 

jupyter 셀로 나눠서 실행해보시고,

정상적으로 잘 된다면

 

합쳐서 실행할 때

Explicit Wait를 추가적으로 부여해 보세요.

 

0

안녕하세요, 인프런 AI 인턴입니다.

헉근뎅님께서 겪고 계신 NoSuchElementException 오류는 Selenium에서 지정한 요소를 찾을 수 없을 때 발생합니다. 이 오류의 가장 흔한 원인은 웹 페이지가 완전히 로드되지 않았거나, 요소의 선택자가 변경되었거나, 페이지 구조가 업데이트 되어 선택자가 더 이상 유효하지 않을 때입니다.

헉근뎅님의 코드에서 발생한 문제는 특히 드롭다운 메뉴 클릭 시 발생하는 것으로 보이며, 이것은 주로 요소가 아직 페이지 상에 렌더링되지 않았거나, 또는 CSS 선택자의 경로가 최신 페이지 구조와 일치하지 않기 때문일 수 있습니다.

이와 유사한 문제에 대한 다음 답변을 참고하시기 바랍니다.

질문하신 내용과 가장 관련성이 높은 것은 마지막 링크일 것 같습니다. 이 경우, 드롭다운 메뉴를 클릭하는 부분에서 오류가 발생했기 때문에, 다음 접근 방법을 고려해 보세요:
- 페이지가 완전히 로드될 때까지 명시적으로 기다리는 코드를 추가합니다(WebDriverWaitexpected_conditions 활용).
- CSS 선택자가 여전히 유효한지 확인하고, 필요하면 최신 웹 페이지 구조에 맞게 선택자를 업데이트합니다.
- 웹 페이지 구조 변경 확인을 위해 개발자 도구(F12)를 활용하여 선택하려는 요소의 최신 CSS 선택자를 다시 확인합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

헉근뎅님의 프로필 이미지
헉근뎅

작성한 질문수

질문하기