webbrowser — 편리한 웹 브라우저 제어기
webbrowser — 편리한 웹 브라우저 제어기
webbrowser 모듈은 사용자에게 웹 기반 문서를 보여 주는 고수준 인터페이스를 제공해요. 대부분의 경우 이 모듈의 open() 함수를 그냥 호출하면 올바르게 동작합니다.
출처: Python 표준 라이브러리
본문
webbrowser 모듈은 사용자에게 웹 기반 문서를 표시하는 고수준 인터페이스를 제공해요. 대부분의 상황에서는 이 모듈의 open() 함수를 호출하는 것만으로 충분합니다.
Unix에서는 X11 환경에서 그래픽 브라우저를 선호하지만, 그래픽 브라우저가 없거나 X11 디스플레이를 사용할 수 없으면 텍스트 모드 브라우저를 사용해요. 텍스트 모드 브라우저를 쓰면 호출 프로세스는 사용자가 브라우저를 종료할 때까지 블로킹됩니다.
환경 변수 BROWSER가 존재하면, 플랫폼 기본값보다 먼저 시도할 브라우저의 os.pathsep으로 구분된 목록으로 해석돼요. 목록 항목의 값에 %s 문자열이 포함되면, %s에 인자 URL을 치환해 쓰는 리터럴 브라우저 명령줄로 해석됩니다. 값이 이미 등록된 브라우저를 가리키는 한 단어라면 그 브라우저가 검색 목록 맨 앞에 추가되고, 항목에 %s가 없으면 단순히 실행할 브라우저의 이름으로 해석돼요. [1]
버전 3.14에서 변경:
BROWSER변수로 플랫폼 기본값 목록의 순서를 바꿀 수 있게 되었습니다. 특히 플랫폼 기본값이 PATH의 명령줄 도구를 가리키지 않는 macOS에서 유용해요.
비-Unix 플랫폼이거나 Unix에서 원격 브라우저를 사용할 수 있을 때는, 제어 프로세스가 사용자가 브라우저를 끝내기를 기다리지 않고 원격 브라우저가 디스플레이에 자신의 창을 유지하도록 둡니다. Unix에서 원격 브라우저를 사용할 수 없으면 제어 프로세스가 새 브라우저를 실행하고 기다려요.
iOS에서는 BROWSER 환경 변수와 자동 올림(autoraise)·브라우저 선호·새 탭/창 생성 제어 인자들을 모두 무시합니다. 웹 페이지는 항상 사용자가 선호하는 브라우저의 새 탭에서, 브라우저가 전경으로 올라오는 방식으로 열려요. iOS에서 webbrowser 모듈을 쓰려면 ctypes 모듈이 필요합니다. ctypes가 없으면 open() 호출이 실패해요.
명령줄 인터페이스
webbrowser 스크립트는 이 모듈의 명령줄 인터페이스로 쓸 수 있어요. URL을 인자로 받고, 다음 선택적 매개변수를 허용합니다.
-n,--new-window— 가능하면 URL을 새 브라우저 창에서 엽니다.-t,--new-tab— URL을 새 브라우저 탭에서 엽니다.
이 옵션들은 당연히 상호 배타적이에요. 사용 예:
python -m webbrowser -t "https://www.python.org"
사용 가능 환경: WASI 아님, Android 아님.
exception webbrowser.Error
브라우저 제어 오류가 발생할 때 일어나는 예외입니다.
webbrowser.open(url, new=0, autoraise=True)
기본 브라우저로 url을 표시합니다. new가 0이면 가능하면 같은 브라우저 창에서, 1이면 가능하면 새 브라우저 창에서, 2면 가능하면 새 브라우저 페이지("탭")에서 엽니다. autoraise가 True면 가능하면 창을 앞으로 올려요 (단, 많은 창 관리자 아래에서는 이 변수 설정과 무관하게 발생할 수 있습니다).
브라우저가 성공적으로 실행되면 True, 아니면 False를 반환합니다.
일부 플랫폼에서 이 함수로 파일 이름을 여는 시도가 동작해 운영체제의 연관 프로그램을 시작할 수 있지만, 이는 지원되지도 않고 이식성도 없어요.
감사 이벤트 webbrowser.open을 인자 url로 발생시킵니다.
webbrowser.open_new(url)
가능하면 기본 브라우저의 새 창에서 url을 열고, 아니면 유일한 브라우저 창에서 엽니다. 성공 시 True, 실패 시 False를 반환해요.
webbrowser.open_new_tab(url)
가능하면 기본 브라우저의 새 페이지("탭")에서 url을 열고, 아니면 open_new()와 같게 동작합니다. 성공 시 True, 실패 시 False를 반환합니다.
webbrowser.get(using=None)
using 브라우저 유형의 제어기 객체를 반환합니다. using이 None이면 호출자 환경에 적합한 기본 브라우저의 제어기를 반환해요.
webbrowser.register(name, constructor, instance=None, *, preferred=False)
브라우저 유형 name을 등록합니다. 등록되면 get() 함수가 그 브라우저 유형의 제어기를 반환할 수 있어요. instance를 제공하지 않거나 None이면, 필요할 때 constructor를 인자 없이 호출해 인스턴스를 만듭니다. instance를 제공하면 constructor는 절대 호출되지 않으며 None일 수 있어요.
preferred를 True로 설정하면 이 브라우저가 인자 없는 get() 호출의 선호 결과가 됩니다. 그렇지 않으면 이 등록 지점은 BROWSER 변수를 설정하거나, 선언한 핸들러 이름과 일치하는 비어 있지 않은 인자로 get()을 호출할 계획이 있을 때만 유용해요.
버전 3.7에서 변경: 키워드 전용 매개변수
preferred가 추가되었습니다.
여러 브라우저 유형이 미리 정의되어 있어요. 아래 표는 get()에 넘길 수 있는 유형 이름과 대응하는 제어기 클래스의 인스턴스화를 보여 줍니다 (모두 이 모듈에 정의).
| 유형 이름 | 클래스 이름 | 비고 |
|---|---|---|
'mozilla' |
Mozilla('mozilla') |
|
'firefox' |
Mozilla('mozilla') |
|
'epiphany' |
Epiphany('epiphany') |
|
'kfmclient' |
Konqueror() |
(1) |
'konqueror' |
Konqueror() |
(1) |
'kfm' |
Konqueror() |
(1) |
'opera' |
Opera() |
|
'links' |
GenericBrowser('links') |
|
'elinks' |
Elinks('elinks') |
|
'lynx' |
GenericBrowser('lynx') |
|
'w3m' |
GenericBrowser('w3m') |
|
'windows-default' |
WindowsDefault |
(2) |
'macosx' |
MacOSXOSAScript('default') |
(3) |
'safari' |
MacOSXOSAScript('safari') |
(3) |
'google-chrome' |
Chrome('google-chrome') |
|
'chrome' |
Chrome('chrome') |
|
'chromium' |
Chromium('chromium') |
|
'chromium-browser' |
Chromium('chromium-browser') |
|
'iosbrowser' |
IOSBrowser |
(4) |
비고:
- "Konqueror"는 Unix용 KDE 데스크톱 환경의 파일 관리자로, KDE가 실행 중일 때만 쓸모가 있어요. KDEDIR 변수로는 충분하지 않아 KDE를 확실히 감지할 방법이 있으면 좋겠습니다. 또한 KDE 2에서 konqueror 명령을 쓸 때도 "kfm" 이름이 사용된다는 점을 알아 두세요 — 구현이 Konqueror 실행을 위한 최선의 전략을 고릅니다.
- Windows 플랫폼에서만.
- macOS에서만.
- iOS에서만.
버전 3.2에서 추가: 새
MacOSXOSAScript클래스가 추가되어 이전MacOSX클래스 대신 Mac에서 사용됩니다. OS 기본값으로 설정되지 않은 브라우저도 여는 지원이 추가되었어요. 버전 3.3에서 추가: Chrome/Chromium 지원이 추가되었습니다. 버전 3.12에서 변경: 여러 구식 브라우저 지원이 제거되었습니다. Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape와 Firefox 35 이하 버전이 포함돼요. 버전 3.13에서 변경: iOS 지원이 추가되었습니다.
간단한 예제 몇 가지:
url = 'https://docs.python.org/'
# 브라우저 창이 이미 열려 있으면 URL을 새 탭에서 엽니다.
webbrowser.open_new_tab(url)
# 가능하면 창을 올리며 새 창에서 URL을 엽니다.
webbrowser.open_new(url)
브라우저 제어기 객체
브라우저 제어기는 name 속성과 모듈 수준 편의 함수에 대응하는 다음 세 메서드를 제공합니다.
controller.name— 브라우저의 시스템 의존 이름.controller.open(url, new=0, autoraise=True)— 이 제어기가 처리하는 브라우저로url을 표시합니다.new가 1이면 가능하면 새 브라우저 창, 2면 가능하면 새 브라우저 페이지("탭")를 엽니다.controller.open_new(url)— 가능하면 이 제어기가 처리하는 브라우저의 새 창에서, 아니면 유일한 브라우저 창에서url을 엽니다.open_new()의 별칭.controller.open_new_tab(url)— 가능하면 이 제어기가 처리하는 브라우저의 새 페이지("탭")에서, 아니면open_new()와 같게 동작합니다.
각주
[1] 전체 경로 없이 여기서 이름이 지정된 실행 파일은 PATH 환경 변수에 주어진 디렉터리에서 검색됩니다.