[PYTHON] Windows에서 활성 Chrome 탭의 URL을 얻으려면 어떻게해야합니까?
PYTHONWindows에서 활성 Chrome 탭의 URL을 얻으려면 어떻게해야합니까?
내 Python 스크립트는 어떻게 Windows에서 현재 활성화 된 Google 크롬 탭의 URL을 가져올 수 있습니까? 이 작업은 사용자를 방해하지 않고 수행해야하므로 키 스트로크를 복사 / 붙여 넣기로 보내는 것은 선택 사항이 아닙니다.
해결법
-
==============================
1.먼저 pywin32를 다운로드하여 설치해야합니다. 스크립트에서 다음 모듈을 가져옵니다.
먼저 pywin32를 다운로드하여 설치해야합니다. 스크립트에서 다음 모듈을 가져옵니다.
import win32gui import win32con
Google 크롬이 현재 활성 창이면 다음과 같이 먼저 창 핸들을 가져옵니다.
hwnd = win32gui.GetForegroundWindow()
(그렇지 않으면, win32gui.FindWindow를 사용하여 Google 크롬 창 핸들을 찾으십시오. Windows Detective는 Windows 용 클래스 이름을 찾는 데 유용합니다.)
URL을 얻는 유일한 방법은 "검색 주소창"(주소 표시 줄)에있는 텍스트를 가져 오는 것입니다. 이것은 일반적으로 탭의 URL이지만 사용자가 현재 입력하고있는 부분 URL이나 검색 문자열 일 수도 있습니다.
또한 검색 주소창에 명시 적으로 입력하고 (아직 입력하지 않은 상태) 사용자가 "https : //"또는 "ftp : //"접두어를 포함하지 않는 한 검색 주소창에 "http : //"접두사가 포함되지 않습니다. // "해당 프로토콜이 사용되는 경우.
따라서 현재 Chrome 창에서 검색 주소창 하위 창을 찾습니다.
omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
Google 크롬 팀이 창 클래스의 이름을 바꾸기로 결정하면 물론 중단됩니다.
그리고 나서 우리는 omnibox의 "window text"를 얻습니다. win32gui.GetWindowText와 함께 작동하지 않는 것 같습니다. 작동하지 않는 대안이 있습니다.
def getWindowText(hwnd): buf_size = 1 + win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) buf = win32gui.PyMakeBuffer(buf_size) win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, buf) return str(buf)
이 작은 함수는 WM_GETTEXT 메시지를 창에 보내고 창 텍스트 (이 경우 전체 검색 텍스트의 텍스트)를 반환합니다.
너 거기 간다!
-
==============================
2.Chrome의 내부 구조가 완전히 변경되어 더 이상 win32gui를 사용하여 Chrome 창의 요소에 실제로 액세스 할 수 없기 때문에 Christian의 대답이 저에게 효과적이지 않았습니다.
Chrome의 내부 구조가 완전히 변경되어 더 이상 win32gui를 사용하여 Chrome 창의 요소에 실제로 액세스 할 수 없기 때문에 Christian의 대답이 저에게 효과적이지 않았습니다.
내가 관리 할 수 있었던 유일한 방법은 UI Automation API를 사용하는 것이 었습니다.이 API는 사용법의 몇 가지 예와 함께이 Python 래퍼가 있습니다.
실행하고 주소를 가져올 Chrome 창으로 전환하십시오.
from time import sleep import uiautomation as automation if __name__ == '__main__': sleep(3) control = automation.GetFocusedControl() controlList = [] while control: controlList.insert(0, control) control = control.GetParentControl() if len(controlList) == 1: control = controlList[0] else: control = controlList[1] address_control = automation.FindControl(control, lambda c, d: isinstance(c, automation.EditControl) and "Address and search bar" in c.Name) print address_control.CurrentValue()
from https://stackoverflow.com/questions/11645123/how-do-i-get-the-url-of-the-active-google-chrome-tab-in-windows by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Matplotlib : 선택 영역을 마우스로 직사각형 모양으로 그립니다. (0) | 2018.11.03 |
---|---|
[PYTHON] 어떻게 파이썬에서 @debuggable 데코레이터를 작성하겠습니까? (0) | 2018.11.03 |
[PYTHON] 1 & 1 공유 호스팅에 플라스크 애플리케이션 배포 (CGI 사용) (0) | 2018.11.03 |
[PYTHON] 장고 - 다른 DB와 Auth (0) | 2018.11.03 |
[PYTHON] 파이썬에서 EOF까지 반복하는 법? (0) | 2018.11.03 |