파이썬 Selenium CDP 지리정보 모킹과 권한 허용 설정 완벽 가이드
🌍 위치 기반 자동화 테스트를 위한 Selenium Emulation.setGeolocationOverride 활용법
웹 자동화 도구인 Selenium은 단순히 버튼 클릭과 폼 입력을 넘어서, 실제 사용 환경을 그대로 시뮬레이션할 수 있는 기능을 제공합니다.
특히 위치 기반 서비스 테스트에서는 지리적 좌표를 임의로 설정하는 기능이 핵심인데요.
CDP(Chrome DevTools Protocol)의 Emulation.setGeolocationOverride를 활용하면 특정 위도와 경도를 지정해 마치 사용자가 그 지역에 있는 것처럼 동작시킬 수 있습니다.
이 과정에서 브라우저 권한 허용 문제도 반드시 해결해야 하는데, 자동화 환경에서는 이를 코드로 처리해야 테스트가 매끄럽게 진행됩니다.
이번 글에서는 파이썬 Selenium을 사용해 지리정보를 모킹하는 방법과 권한 허용 설정까지 단계별로 정리해 드립니다.
중급 사용자라면 이 과정을 통해 테스트 자동화의 완성도를 한 단계 끌어올릴 수 있을 것입니다.
실무에서 바로 적용 가능한 코드 예시와 함께 주의할 점까지 다루니 끝까지 따라와 보세요.
📋 목차
🌐 Selenium과 지리정보 모킹 개요
웹 자동화에서 가장 까다로운 요소 중 하나가 바로 위치 기반 기능 테스트입니다.
예를 들어 음식 배달 서비스, 지도 검색, 근처 매장 찾기 같은 기능은 사용자의 실제 GPS 좌표를 기반으로 동작합니다.
하지만 테스트 환경에서 매번 실제 위치를 이동할 수는 없기 때문에 지리정보 모킹(Geolocation Mocking)이 필수적으로 활용됩니다.
파이썬 Selenium은 기본적으로 브라우저 동작을 자동화하는 도구지만, 크롬 개발자 도구 프로토콜(CDP, Chrome DevTools Protocol)을 연동하면 위치 정보도 제어할 수 있습니다.
이때 사용되는 핵심 메서드가 Emulation.setGeolocationOverride입니다.
이 메서드를 활용하면 위도(latitude), 경도(longitude), 정확도(accuracy)를 직접 지정하여 테스트를 원하는 장소에서 실행할 수 있습니다.
🧭 지리정보 모킹이 필요한 이유
실무 테스트에서는 다양한 시나리오를 검증해야 합니다.
서울에서 실행한 테스트를 부산, 뉴욕, 도쿄 등 다른 도시 환경에서도 검증할 필요가 있을 수 있습니다.
이때 실제 물리적 위치를 이동하는 대신 좌표값만 바꿔주는 것이 지리정보 모킹의 핵심 역할입니다.
- 🌍위치 기반 서비스 테스트를 여러 지역에서 반복 수행
- 📱모바일 브라우저 환경에서 GPS 권한 허용 상황 재현
- 🛰️실제 이동 없이 다양한 좌표 데이터로 기능 검증
💡 Selenium에서 CDP 활용하기
Selenium 4부터는 execute_cdp_cmd() 메서드를 통해 Chrome DevTools Protocol을 직접 호출할 수 있습니다.
이를 통해 단순히 DOM 요소를 조작하는 수준을 넘어서 브라우저 자체 설정까지 제어할 수 있게 되었죠.
즉, Selenium은 이제 단순 자동화 도구가 아니라, 실제 사용자 환경을 세밀하게 재현할 수 있는 강력한 플랫폼으로 발전한 것입니다.
🛠️ CDP Emulation.setGeolocationOverride 사용법
파이썬 Selenium에서 Emulation.setGeolocationOverride는 특정 좌표값을 브라우저에 전달하여 사용자의 실제 위치를 대체하는 역할을 합니다.
이를 통해 테스트 환경에서도 마치 사용자가 특정 지역에 있는 것처럼 동작을 재현할 수 있습니다.
⚙️ 기본 사용 예제
아래 예시는 위도를 37.5665, 경도를 126.9780으로 설정하여 서울 한복판에서 접속하는 것처럼 브라우저를 동작시키는 코드입니다.
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
# Chrome DevTools Protocol 명령 실행
params = {
"latitude": 37.5665,
"longitude": 126.9780,
"accuracy": 100
}
driver.execute_cdp_cmd("Emulation.setGeolocationOverride", params)
driver.get("https://www.google.com/maps")
위 코드를 실행하면 구글 지도에서 실제 위치가 아닌, 지정한 좌표(서울 시청 근처)로 표시됩니다.
이는 위치 기반 앱 테스트에서 매우 유용합니다.
📝 파라미터 설명
| 파라미터 | 설명 |
|---|---|
| latitude | 위도 (남북 위치를 지정, 예: 서울 37.5665) |
| longitude | 경도 (동서 위치를 지정, 예: 서울 126.9780) |
| accuracy | 위치 정확도 (미터 단위, 값이 작을수록 더 정밀) |
테스트 목적에 따라 정확도를 조정하면 더욱 현실적인 시뮬레이션이 가능합니다.
예를 들어 accuracy를 1로 지정하면 GPS 수준의 세밀한 위치 모킹이 가능하고, 1000으로 설정하면 대략적인 지역만 반영됩니다.
🔑 브라우저 권한 허용 자동 처리
위치 정보를 모킹하기 위해서는 브라우저에서 위치 권한(Geolocation Permission)을 자동으로 허용하도록 설정해야 합니다.
기본적으로 브라우저는 새로운 웹사이트가 위치 접근을 요청하면 팝업을 띄워 사용자의 허용 여부를 묻습니다.
자동화 테스트 환경에서는 사람이 직접 ‘허용’을 클릭할 수 없기 때문에, 이 과정을 코드로 처리해 주어야 합니다.
⚙️ ChromeOptions 활용
파이썬 Selenium에서는 ChromeOptions 객체를 사용하여 사전에 권한 정책을 설정할 수 있습니다.
아래 예시에서는 위치 권한을 항상 허용(always allow)으로 지정합니다.
from selenium import webdriver
options = webdriver.ChromeOptions()
prefs = {
"profile.default_content_setting_values.geolocation": 1 # 1 = 허용, 2 = 차단
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
driver.get("https://www.google.com/maps")
이 설정을 적용하면 권한 팝업이 표시되지 않고 자동으로 위치 정보가 허용됩니다.
즉, 권한 문제로 테스트가 중단되는 상황을 예방할 수 있습니다.
🛡️ 권한 제어 시 유의사항
⚠️ 주의: 권한을 무조건 허용하도록 설정하면 보안 측면에서 위험할 수 있습니다.
테스트 환경에서는 괜찮지만, 실제 서비스 환경에서는 반드시 사용자 선택을 존중해야 합니다.
또한, 브라우저 버전에 따라 권한 설정 방식이 조금씩 다를 수 있으므로 Selenium과 ChromeDriver의 버전을 최신으로 유지하는 것이 좋습니다.
⚙️ 실전 코드 예제와 적용 시나리오
이제 앞서 설명한 지리정보 모킹과 권한 허용 설정을 조합하여, 실제 테스트 환경에서 사용할 수 있는 완성된 코드 예제를 살펴보겠습니다.
아래 코드는 서울과 뉴욕 두 가지 위치에서 동일한 테스트를 실행하는 시나리오입니다.
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
prefs = {
"profile.default_content_setting_values.geolocation": 1
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)
def set_location(lat, lon):
params = {"latitude": lat, "longitude": lon, "accuracy": 100}
driver.execute_cdp_cmd("Emulation.setGeolocationOverride", params)
# 서울 위치 테스트
set_location(37.5665, 126.9780)
driver.get("https://www.google.com/maps")
time.sleep(5)
# 뉴욕 위치 테스트
set_location(40.7128, -74.0060)
driver.get("https://www.google.com/maps")
time.sleep(5)
driver.quit()
위 코드를 실행하면 동일한 브라우저 세션에서 서울과 뉴욕 두 지역을 번갈아가며 테스트할 수 있습니다.
이 방식은 국제 서비스를 운영하거나, 다양한 지역에서 동작을 확인해야 하는 환경에서 특히 유용합니다.
🌍 활용 가능한 시나리오
- 🚖택시 호출 앱에서 출발지를 여러 도시로 모킹하여 테스트
- 🍔배달 앱의 매장 목록과 배달 가능 지역 확인
- 🏨호텔 예약 사이트에서 지역별 숙박 검색 결과 비교
- 🛒이커머스 사이트의 지역별 배송 가능 여부 검증
즉, 위치 기반 서비스라면 어떤 환경에서도 이 기법을 적용할 수 있으며, QA 및 자동화 테스트의 효율성을 크게 높여줍니다.
💡 자주 발생하는 오류와 해결 방법
Selenium에서 Emulation.setGeolocationOverride를 활용할 때 몇 가지 오류가 자주 발생합니다.
이 문제들을 미리 알고 대비하면 테스트 자동화 과정에서 불필요한 시행착오를 줄일 수 있습니다.
🚫 권한 관련 오류
가장 흔한 오류는 브라우저에서 위치 권한을 허용하지 않아 발생하는 문제입니다.
이 경우 자동화 코드에서 아무리 좌표를 설정해도 실제 페이지는 여전히 “위치 정보를 가져올 수 없습니다”라는 메시지를 표시합니다.
⚠️ 해결 방법: ChromeOptions에서 profile.default_content_setting_values.geolocation을 1로 지정해야 합니다.
🌐 좌표값 오류
위도(latitude)와 경도(longitude)를 잘못 입력하면 브라우저가 좌표를 인식하지 못하거나 잘못된 지역으로 표시됩니다.
특히 위도는 -90에서 90, 경도는 -180에서 180 범위를 벗어나면 오류가 발생합니다.
💡 TIP: 좌표가 정확한지 확인하려면 구글 지도에 위도와 경도를 직접 입력해 보는 것이 가장 확실합니다.
⚡ 드라이버 버전 불일치
Selenium, ChromeDriver, Chrome 브라우저의 버전이 맞지 않으면 CDP 명령이 실행되지 않는 경우가 있습니다.
예를 들어 최신 버전의 Chrome에서 구버전 ChromeDriver를 사용할 경우, unknown command 오류가 발생할 수 있습니다.
- 🔄Selenium, Chrome, ChromeDriver 버전을 항상 최신으로 유지
- 🧩가상 환경(venv, conda)에서 독립적으로 관리하여 충돌 방지
이처럼 발생할 수 있는 오류를 사전에 대비하면, 안정적이고 재현성 있는 테스트 환경을 만들 수 있습니다.
❓ 자주 묻는 질문 (FAQ)
Selenium에서 위치 정보를 모킹하는 이유가 뭔가요?
Emulation.setGeolocationOverride는 모든 브라우저에서 사용할 수 있나요?
위치 권한 팝업을 자동으로 허용하려면 어떻게 해야 하나요?
"profile.default_content_setting_values.geolocation": 1을 지정하면 권한 팝업이 표시되지 않고 자동으로 허용됩니다.
정확도(accuracy) 값은 어떤 기준으로 설정하나요?
여러 지역을 순차적으로 테스트할 수 있나요?
Emulation.setGeolocationOverride에 다른 좌표를 순차적으로 전달하면 여러 지역을 이동하며 테스트할 수 있습니다.
테스트 중 ‘위치 정보를 가져올 수 없습니다’ 오류가 뜨는 이유는 뭔가요?
Selenium 3 버전에서도 사용할 수 있나요?
execute_cdp_cmd()를 사용할 수 있습니다.
모바일 환경에서도 동일하게 적용되나요?
📝 Selenium 지리정보 모킹과 권한 설정 핵심 정리
이번 글에서는 파이썬 Selenium을 활용하여 지리정보를 모킹하고, 위치 권한을 자동으로 허용하는 방법을 다뤘습니다.
핵심은 Emulation.setGeolocationOverride를 통해 원하는 위도와 경도를 지정하고, ChromeOptions 설정을 통해 권한 팝업을 자동으로 처리하는 것입니다.
이 과정을 통해 실제 환경과 유사한 테스트를 반복적으로 실행할 수 있으며, 국제 서비스나 위치 기반 애플리케이션에서 특히 강력한 효과를 발휘합니다.
또한 권한 오류, 좌표값 오류, 드라이버 버전 불일치와 같은 자주 발생하는 문제들을 미리 인지하고 해결 방법을 적용하면, 안정적이고 재현성 있는 자동화 테스트 환경을 구축할 수 있습니다.
결국 이 기술을 활용하면 QA 테스트의 효율성을 높이고, 더 신뢰성 있는 제품 검증이 가능해집니다.
🏷️ 관련 태그 : Selenium, 파이썬자동화, 위치기반테스트, 지리정보모킹, ChromeDevTools, EmulationAPI, QA자동화, 테스트자동화, 웹테스트, 크롬드라이버