파이썬(Python)/웹스크롤링

selenium 에러발생 시 해결방법 "selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element"

끄적끄적아무거나 2021. 7. 15. 09:11
반응형

Xpath 검색 시 문제 사항

 

나라장터 사이트에서 검색을 통해 들어간 페이지에서 text를 가져오려고 하는 파이썬 셀레니움(selenium)을 실행하는 코드를 작성하였다. 하지만 xpath를 통해 검색하였으나 아래와 같은 에러메세지와 함께 코드가 동작되지 않았다.

 

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element

 

내가 해결한 방법을 공유하겠다. 공유하기에 앞서 동일한 에러메세지라도 상황에 따라 내 해결책이 적용되지 않을 수 있음을 감안하길 바란다.

 


해결 코드>>

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.g2b.go.kr/index.jsp')

search_box = driver.find_element_by_xpath('//*[@id="bidNm"]')
search_box.send_keys('품질')

search_date = driver.find_element_by_xpath('//*[@id="setMonth1_1"]').click()
search_start = driver.find_element_by_xpath('//*[@id="searchForm"]/div/fieldset[1]/ul/li[4]/dl/dd[3]/a').click()

driver.switch_to.frame('sub')
driver.switch_to.frame('main')

elem = driver.find_element_by_xpath('//*[@id="resultForm"]/div[2]/table/tbody/tr[1]')
print(elem.text)

 

문제원인>>

그림1

그림1에서 개발자 모드로 화면의 코드를 살펴 보자. HTML 문서안에 여러개의 <frame></frame> 으로 묶여 있다. 프레임 마다 새로운 head와 body가 존재했다. 그래서 내가 원하는 text까지 가기 위해서는 아래 코드 처럼 2번의 프레임 이동을 통해서 원하는 xpath 검색이 실행 되었다.

 

driver.switch_to.frame('sub')
driver.switch_to.frame('main')

 

xpath의 위치를 확인하고 frame안에 있는지 확인뒤 해당 frame으로 이동 후에 실행 하여야 한다.

 

반응형