복붙노트

[PYTHON] Windows에서 활성 Chrome 탭의 URL을 얻으려면 어떻게해야합니까?

PYTHON

Windows에서 활성 Chrome 탭의 URL을 얻으려면 어떻게해야합니까?

내 Python 스크립트는 어떻게 Windows에서 현재 활성화 된 Google 크롬 탭의 URL을 가져올 수 있습니까? 이 작업은 사용자를 방해하지 않고 수행해야하므로 키 스트로크를 복사 / 붙여 넣기로 보내는 것은 선택 사항이 아닙니다.

해결법

  1. ==============================

    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. ==============================

    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()
    
  3. 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