Wie kann mein Python-Skript die URL des derzeit aktiven Google Chrome-Tabs in Windows abrufen? Dies muss durchgeführt werden, ohne den Benutzer zu unterbrechen. Daher ist das Senden von Schlüsselstrichen zum Kopieren/Einfügen keine Option.Wie erhalte ich die URL der aktiven Google Chrome-Registerkarte in Windows?
Antwort
Zunächst müssen Sie pywin32 herunterladen und installieren. Importieren Sie diese Module in Ihrem Skript:
import win32gui
import win32con
Wenn Google Chrome die gerade aktiven Fenster ist, erhält zuerst den Fenstergriff nach:
hwnd = win32gui.GetForegroundWindow()
(Ansonsten finden Sie das Google Chrome Fenstergriff von win32gui.FindWindow
verwenden. Windows Detective ist praktisch, wenn Sie Klassennamen für Windows herausfinden.)
Es scheint, die einzige Möglichkeit, die URL zu erhalten, ist, den Text in "omnibox" (address bar) zu bekommen. Dies ist normalerweise die URL der Registerkarte, könnte aber auch eine Teil-URL oder eine Suchzeichenfolge sein, die der Benutzer gerade eingibt.
Auch die URL in der Omnibox enthält nicht das Präfix "http: //", es sei denn, der Benutzer hat es explizit eingegeben (und noch nicht die Eingabetaste gedrückt), aber es enthält tatsächlich "https: //" oder "ftp: //", wenn diese Protokolle verwendet werden.
So finden wir die Omnibox Kind Fenster innerhalb der aktuellen Chrome-Fenster:
omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
Dies wird natürlich brechen, wenn das Google Chrome-Team ihre Fensterklassen umbenannt entscheidet.
Und dann bekommen wir den "Fenstertext" der Omnibox, der mit win32gui.GetWindowText
für mich nicht zu funktionieren scheint. Gut, dass es eine Alternative, die funktioniert:
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)
Diese kleine Funktion, um die WM_GETTEXT Nachricht an das Fenster sendet und gibt das Fenster Text (in diesem Fall wird der Text in der Omnibox).
Los geht's!
Die Antwort von Christian hat bei mir nicht funktioniert, da sich die interne Struktur von Chrome komplett geändert hat und Sie nicht mehr wirklich auf Elemente des Chrome-Fensters mit win32gui zugreifen können.
Der einzig mögliche Weg, ich war API durch UI Automation finden verwaltet, die this python wrapper mit einigen Anwendungsbeispielen
Run diesen und wechseln Sie in Chrome-Fenster Sie greifen wollen Adresse hat:
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. Wie erhalte ich die Anzahl der aktiven Threads?
- 2. Wie erhalte ich die aktuelle Server URL der appengine App?
- 3. Wie kann ich die URL der aktiven Registerkarte in Firefox mit C# abrufen?
- 4. Wie erhalte ich die URL-Parameter in einer Flasche Ansicht
- 5. Struts2 - Erhalte die URL von der Fehlerseite
- 6. Erhalte die ursprüngliche URL während der Anmeldung
- 7. Wie erhalte ich die Anzahl der Seiten in Google Text & Tabellen über Google Script?
- 8. Wie erhalte ich eine Python-Verteilungs-URL?
- 9. Wie beschränke ich die Anzahl der aktiven Threads in Python?
- 10. Erhalte Zugriffstoken von der URL
- 11. Wie erhalte ich die Anfrage-URL im API-Gateway?
- 12. Wie erhalte ich die aktuelle URL von einem FilterAttribute?
- 13. Wie erhalte ich die URL des aufgenommenen Bildes?
- 14. Wie erhalte ich die URL für Google Map auf meiner Website?
- 15. Wie erhalte ich die URL eines anderen Inhaltselements mit N2CMS?
- 16. Wie erhalte ich die URL Teil nach einem „#“ von Httprequestbase
- 17. Wie erhalte ich die URL der Antwort-Seite, nachdem ich ein Formular in mechanize eingereicht habe?
- 18. Wie erhalte ich Google Mail-Kontakte?
- 19. Wie erhalte ich URL-Label beim Parsing Request URL?
- 20. Wie erhalte ich eine Liste der installierten Windows Universal Apps?
- 21. Wie ändere ich die Farbe der aktiven Registerkarte? (Android Studio)
- 22. Wie die Anzahl der aktiven Sitzungen
- 23. Wie erhalte ich einen symmetrischen Schlüssel in Windows Phone 7?
- 24. Wie erhalte ich meine App in der Google Phone-Suchliste von Google Now?
- 25. Wie erhalte ich die EventBus-Instanz in der Composite-Erweiterungsklasse?
- 26. Wie erhalte ich die Computernamen in .NET
- 27. Wie erhalte ich die reale nutzbare Auflösung
- 28. Erhalte die ID von explodierender URL
- 29. Wie erhalte ich MicrosoftReportViewer in meinem Windows Forms Formular?
- 30. Wie erhalte ich die Google Chat-ID (Hangout-ID) eines Google-authentifizierten Nutzers (oauth2)?
Vielen Dank für "Windows Detektiv" !! – akaRem
Könntest du solch ein "kniffeliges" Ding löschen: wenn irgendeine "Bösewicht-App" (Python-Skript, WindowDetective, ..) versucht, irgendwelche Daten (hwnd, class, text, etw. Else) von "opfer-app" zu lesen (Chrome , IE, "SomeParanoidApp") ist es möglich, dass "Opfer" fühlen/sehen/überprüfen, dass es gescannt wurde? – akaRem
Gilt dies nur für Windows-Plattformen oder funktioniert diese Bibliothek plattformübergreifend? Falls nein, gibt es eine entsprechende Bibliothek für Mac OS. –