들어가며
나라장터에 접속하면 아래 그림과 같이 팝업창이 여러 개가 나타납니다.
이런 팝업창을 제거하는 방법입니다.

나라장터뿐만 아니라 유사한 형태로 팝업을 처리하는 웹사이트에는 대부분 가능한 방법으로 보입니다.
※ 팝업창이 나타나는 구조는 사이트마다 다를 수 있습니다.
구현할 내용은 나라장터 사이트에 접속 후
팝업창의 오늘 하루 이 창을 열지 않음을 클릭해 팝업을 닫는 방법입니다.
Selenium을 통해 요소를 클릭할 때 주의할 점은
요소가 가려져 있으면 클릭이 안될 수도 있다는 점입니다.
위 그림을 보면 팝업창은 모두 네개 인데
"오늘 하루 이 창을 열지 않음"이 보이는 창은 두 개입니다.
보이지 않는 팝업의 요소는 클릭이 되지 않을 수도 있습니다.
그렇기 때문에 맨 위의 요소부터 차례로 클릭을 해야
에러없이 모든 창을 닫을 수 있습니다.
요소 찾아보기
먼저 Selenium으로 나라장터에 접속하는 코드입니다.
단순히 나라장터에 접속하고 5초 후에 브라우저를 닫는 코드입니다.
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.g2b.go.kr/")
time.sleep(5)
driver.quit()
다음은 나라장터에 처음 접속했을 때 상황을 살펴보겠습니다.
F12를 눌러 요소를 검사해 보면
아래 그림의 부분이 팝업창을 나타내는 것으로 보입니다.

잠시 살펴보면 ID의 전반부는 동일하지만 마지막에 숫자가 다릅니다.
왠지 이 숫자는 팝업 내용이 변경될 때마다 숫자도 바뀔 것 같습니다.
CLASS는 네 개가 모두 동일합니다.
aria-labelledby도 숫자가 달라지므로 이것도 고정된 요소로 사용하기는 어려워 보입니다.
그다음
오늘 하루 이 창을 열지 않음의 요소를 찾아보겠습니다.
해당 부분을 살펴보면
class가 w2checkbox_input 인 것을 찾으면 될 것 같습니다.
조금 더 정확하게 하기 위해
title이 "오늘 하루 이 창을 열지 않음"
인지도 확인하겠습니다.
<input type="checkbox" class="w2checkbox_input" name="mf_wfm_container_wq_uuid_896_wq_uuid_903_poupR23AB0000013499_wframe_popupCnts_cbxTodayClose_input" index="0" id="mf_wfm_container_wq_uuid_896_wq_uuid_903_poupR23AB0000013499_wframe_popupCnts_cbxTodayClose_input_0" title="오늘 하루 이 창을 열지 않음">
팝업 개수 확인하기
먼저 팝업창의 class는 아래와 같으므로 모두 몇 개인지 확인해 보겠습니다.
w2window w2window_restored w2popup_window w2window_window_move_type positionFixed
코드는 다음과 같습니다.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.g2b.go.kr/")
wait = WebDriverWait(driver, 10)
popups = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "w2window_restored")))
print(f"팝업 갯수 : {len(popups)}개")
time.sleep(5)
driver.quit()
확인해 보니 팝업의 개수는 모두 4개이고
나라장터에 접속했을 때 나타나는 팝업의 개수도 모두 4개로 동일합니다.
여기서 popups는 리스트 형태로 값이 저장됩니다.
나라장터 사이트를 확인해 보면 맨 첫 번째 요소의 팝업이 제일 아래에 위치하고 있다는 점입니다.
첫번째 요소부터 닫기 시작하면 클릭이 되지 않아 에러가 발생할 수 있으므로
맨 마지막 요소부터 닫기 시작해야 합니다.
그렇기 때문에 popups의 값을 역순으로 뒤집어 줍니다.
그래야 맨 앞의 팝업창부터 닫기 시작합니다.
popups.reverse() #리스트 뒤집기
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.g2b.go.kr/")
wait = WebDriverWait(driver, 10)
popups = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "w2window_restored")))
print(f"팝업 갯수 : {len(popups)}개")
popups.reverse()
time.sleep(5)
driver.quit()
하위 요소 찾기
마지막으로 하위 요소에서
class가 w2window_restored
이면서
title이 "오늘 하루 이 창을 열지 않음"
인 것을 찾아서 클릭을 하게 하겠습니다.
for popup in popups:
time.sleep(1)
checkbox = popup.find_element(By.XPATH, ".//input[@class='w2checkbox_input' and @title='오늘 하루 이 창을 열지 않음']") checkbox.click()
print("오늘 하루 이 창을 열지 않음 클릭")
전체 코드입니다.
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.g2b.go.kr/")
wait = WebDriverWait(driver, 10)
popups = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "w2window_restored")))
print(f"팝업 갯수 : {len(popups)}개")
popups.reverse()
for popup in popups:
time.sleep(1)
checkbox = popup.find_element(By.XPATH, ".//input[@class='w2checkbox_input' and @title='오늘 하루 이 창을 열지 않음']")
checkbox.click()
print("오늘 하루 이 창을 열지 않음 클릭")
time.sleep(5)
driver.quit()
마치며
위 코드를 사용하면
나라장터에 접속했을 때 팝업을 자동으로 제거하게 할 수 있습니다.
비슷한 형태로 구성된 사이트에서도 동작이 가능합니다.
중요한 점은 해당 요소를 역순으로 배열해야 한다는 점입니다.
나라장터의 사이트만 확인해 보았으므로 다른 사이트도 역순으로 해야 하는지는 잘 모르겠지만,
이는 요소를 검사해 보면 확인할 수 있는 사항이므로
상황에 따라 선택하면 될 것으로 보입니다.
여기를 방문하시면 더 많은 파이썬 관련 자료를 확인할 수 있습니다.
'파이썬(Python)' 카테고리의 다른 글
[ openpyxl ] 파이썬 openpyxl 라이브러리를 사용하여 시트 생성과 시트 색 지정하기 (0) | 2025.03.30 |
---|---|
[ chardet ] 파이썬(Python)으로 파일 인코딩 자동 감지하기, 인코딩 탐지기 만들기 (0) | 2024.11.24 |
[ Basic ] 파이썬(Python) isinstance() 함수에 대한 기본 (0) | 2024.11.21 |
[ 한글 자동화 ] 한글 문서 페이지가 홀수이면 빈 페이지 삽입하기 (2) | 2024.11.19 |
[ 알고리즘 ] 파이썬 이진탐색(Binary Search) 알고리즘, 숫자 맞추기 (0) | 2024.11.18 |