W jaki sposób mój skrypt w języku Python może uzyskać adres URL aktywnej karty Google Chrome w systemie Windows? Należy to zrobić bez przeszkadzania użytkownikowi, więc wysyłanie naciśnięć klawiszy do kopiowania/wklejania nie jest opcją.Jak uzyskać adres URL aktywnej karty Google Chrome w systemie Windows?
Odpowiedz
Najpierw pobierz i zainstaluj pywin32. Importować te moduły w skrypcie:
import win32gui
import win32con
Jeśli Google Chrome jest aktualnie aktywne okno, należy najpierw uzyskać uchwyt okna przez:
hwnd = win32gui.GetForegroundWindow()
(W przeciwnym razie, znaleźć Google Chrome uchwyt okna przy użyciu win32gui.FindWindow
. Windows Detective jest przydatny przy wyszukiwaniu nazw klas dla okien.)
Wydaje się, że jedynym sposobem uzyskania adresu URL jest uzyskanie tekstu w "omnibox" (address bar). Zwykle jest to adres URL karty, ale może to być również dowolny częściowy adres URL lub ciąg wyszukiwania, który użytkownik aktualnie pisze.
Ponadto adres URL w omniboksie nie będzie zawierał przedrostka "http: //", chyba że użytkownik wpisze je jawnie (i jeszcze nie naciśnie klawisza enter), ale w rzeczywistości będzie zawierać "https: //" lub "ftp: //", jeśli używane są te protokoły.
Więc znaleźć omnibox okno potomne wewnątrz bieżącego okna chrome:
omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
Będzie przerwy oczywiście jeśli zespół Google Chrome postanawia zmienić nazwę ich klasy okien.
A następnie otrzymujemy "tekst okna" omniboksu, który nie działa dla mnie z win32gui.GetWindowText
. Dobrze, że istnieje alternatywa, która działa:
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)
Ta mała funkcja wysyła wiadomość WM_GETTEXT do okna i zwraca tekst okna (w tym przypadku, tekst w omniboksie).
Idź!
Odpowiedź Christiana nie zadziałała, ponieważ wewnętrzna struktura Chrome została całkowicie zmieniona i nie można już uzyskać dostępu do elementów okna przeglądarki Chrome przy użyciu programu win32gui.
Jedynym możliwym sposobem udało mi się znaleźć to przez UI Automation API, które ma this python wrapper z kilkoma przykładami użycia
uruchomić ten i przejść do okna Chrome chcesz pobrać adres z:
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()
- 1. Uzyskaj adres URL określonej karty?
- 2. Jak uzyskać adres ip konkretnej karty w systemie Windows XP za pomocą polecenia
- 3. Jak zmienić adres URL zdalnego/docelowego repozytorium w systemie Windows?
- 4. Sterowanie kartami, takie jak karty Google Chrome?
- 5. Jak uzyskać adres URL mapy Google Map w mojej witrynie?
- 6. Jak uzyskać adres URL upuszczonego obrazu za pomocą skryptu chrome?
- 7. Jak uzyskać adres IP z gniazda W systemie Windows
- 8. Jak uzyskać pełny adres url
- 9. Jak uzyskać aktualny adres URL
- 10. Jak uzyskać adres URL żądania?
- 11. Otwórz adres URL ze skryptu w systemie Windows Server 2008
- 12. Jak uzyskać adres URL zdalnego repozytorium svn?
- 13. Jak uzyskać adres URL aktualnie otwartej karty w moim oknie działań strony?
- 14. Jak uzyskać adres URL w http.Request
- 15. Jak uzyskać adres URL odpowiedzi w XMLHttpRequest?
- 16. Jak uzyskać adres URL bazy w OctoberCMS?
- 17. Jak uzyskać adres URL nadrzędny w Javie?
- 18. Jak uzyskać statystyki karty sieciowej w systemie Linux/Mac OSX?
- 19. Adres URL wielu znaczników w Google Maps
- 20. Adres URL elementu iframe z rozszerzenia Chrome
- 21. Jak uzyskać pełny adres URL strony Drupal?
- 22. Jak uzyskać docelowy adres URL zdarzenia onbeforeunload?
- 23. Jak uzyskać adres URL pliku .nupkg?
- 24. Jak uzyskać bieżący adres URL aplikacji Appengine?
- 25. Jak uzyskać adres URL strony głównej?
- 26. Pobierz adres URL i zapisz go Przedłużenie Chrome
- 27. Jak uzyskać aktualny adres URL do schowka przy pomocy Vimperatora?
- 28. Jak uzyskać adres URL z UIImage
- 29. Jak uzyskać adres URL pliku z bezwzględnej ścieżki w Delphi?
- 30. Jak mogę sprawdzić, czy Chrome obsługuje niestandardowe karty Chrome?
Wielkie dzięki za "Windows Detective"! – akaRem
Czy możesz wyczyścić takie "trudne" rzeczy: kiedy jakiś "złoczyńca-app" (skrypt Pythona, WindowDetective, ..) próbuje odczytać dowolne dane (hwnd, klasa, tekst, coś innego) z "ofiary-app" (Chrome , IE, "SomeParanoidApp") jest możliwe, że "ofiara" może poczuć/zobaczyć/sprawdzić, czy został zeskanowany? – akaRem
Czy ma to zastosowanie tylko na platformie Windows lub ta biblioteka działa na różnych platformach? Jeśli nie, czy istnieje odpowiednik biblioteki dla systemu Mac OS. –