Làm cách nào để tập lệnh Python của tôi nhận được URL của tab Google Chrome hiện đang hoạt động trong Windows? Việc này phải được thực hiện mà không làm gián đoạn người dùng, do đó việc gửi các nét chính để sao chép/dán không phải là một tùy chọn.Làm cách nào để nhận URL của tab Google Chrome đang hoạt động trong Windows?
Trả lời
Trước tiên, bạn cần tải xuống và cài đặt pywin32. Nhập những mô-đun trong kịch bản của bạn:
import win32gui
import win32con
Nếu Google Chrome là cửa sổ đang hoạt động, lần đầu tiên có được xử lý cửa sổ theo:
hwnd = win32gui.GetForegroundWindow()
(Nếu không, tìm ra xử lý cửa sổ Google Chrome bằng cách sử dụng win32gui.FindWindow
. Windows Detective tiện dụng khi tìm ra tên lớp cho cửa sổ.)
Có vẻ như cách duy nhất để lấy URL là lấy văn bản trong "omnibox" (address bar). Đây thường là URL của tab, nhưng cũng có thể là bất kỳ URL hoặc chuỗi tìm kiếm nào mà người dùng hiện đang nhập.
Ngoài ra, URL trong thanh địa chỉ sẽ không bao gồm tiền tố "http: //" trừ khi người dùng đã nhập nó một cách rõ ràng (và chưa nhấn enter), nhưng thực tế nó sẽ bao gồm "https: //" hoặc "ftp: //" nếu các giao thức đó được sử dụng.
Vì vậy, chúng ta thấy các cửa sổ con omnibox bên trong cửa sổ Chrome hiện tại:
omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
này muốn của phá vỡ tất nhiên nếu nhóm Google Chrome quyết định đổi tên lớp cửa sổ của họ.
Và sau đó chúng tôi nhận được "văn bản cửa sổ" của thanh địa chỉ, dường như không hoạt động với win32gui.GetWindowText
đối với tôi. Điều tốt có một sự thay thế mà không làm việc:
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)
chức năng nhỏ này sẽ gửi thông điệp WM_GETTEXT vào cửa sổ và trả về văn bản cửa sổ (trong trường hợp này, các văn bản trong thanh tìm kiếm).
Có bạn đi!
Câu trả lời của Christian không phù hợp với tôi vì cấu trúc nội bộ của Chrome đã thay đổi hoàn toàn và bạn không thể truy cập các thành phần của cửa sổ Chrome bằng win32gui nữa.
Cách duy nhất có thể, tôi cố gắng tìm đã được thông qua giao diện người dùng tự động hóa API, trong đó có this python wrapper với một số ví dụ về việc sử dụng
Run này và chuyển sang cửa sổ Chrome mà bạn muốn lấy địa chỉ từ:
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. Tôi làm cách nào để lấy URL của tab hiện tại từ tiện ích Google Chrome?
- 2. Làm cách nào để nhận được 'font-weight: lighter' để hoạt động trong Google Chrome?
- 3. Plugin Google Chrome: Cách nhận tên miền từ URL (tab.url)
- 4. làm cách nào để kiểm tra xem tab nào đang hoạt động bằng các tab jquery?
- 5. Cách nhận URL của tab hiện đang mở trong cửa sổ bật lên hành động trên trang của tôi?
- 6. Cách kích hoạt ('click') trên tab hiện đang hoạt động của tab jquery
- 7. Nhận URL của tab phía trước nhất từ Chrome trên OS X?
- 8. Tôi làm cách nào để jsFiddle hoạt động trong Chrome?
- 9. Sử dụng javascript để truy cập API URL shortener của Google trong một phần mở rộng của Google Chrome
- 10. Điều khiển tab như tab Google Chrome?
- 11. Tôi làm cách nào để phát hiện loại mime của tab hiện tại trong tiện ích Google Chrome?
- 12. Plugin NPAPI không hoạt động trong Google Chrome
- 13. Màu nền nào đang hoạt động trong Windows Phone 7?
- 14. Truy xuất tab nào đang mở trong Chrome?
- 15. Làm cách nào để nhận được url đầy đủ của trang tôi đang ở trong C#
- 16. Làm cách nào để chương trình của tôi hoạt động trong Windows Vista và Windows 7?
- 17. enable nhấn tab để tìm kiếm trong google chrome trên trang web của tôi
- 18. Cách lấy URL của tab hiện tại trong tiện ích mở rộng chrome của tôi bằng cách sử dụng javascript
- 19. Không thể nhận execCommand ('dán') để hoạt động trong Chrome
- 20. Làm cách nào để phát hiện hoạt động của người dùng bằng dịch vụ Java đang chạy trên Windows?
- 21. Làm nổi bật tab được ghim Google Chrome chưa đọc
- 22. Làm cách nào để nhận được text-icu hoạt động trên Windows?
- 23. Tôi làm cách nào để chặn tự động tìm kiếm trang trong Google Chrome?
- 24. Đánh dấu một tab đang hoạt động - CSS
- 25. Làm thế nào để clipboard hoạt động trong Windows?
- 26. css không hoạt động trong chrome (linux và windows)
- 27. Cách Adblock Plus hoạt động trong Chrome?
- 28. Nhận URL trang hiện trong phần mở rộng Chrome
- 29. Hiệu ứng hoạt hình google chrome trong android
- 30. Phím tắt Google Chrome mở nhiều trang web trong nhiều tab
Rất cám ơn "thám tử cửa sổ" !! – akaRem
Bạn có thể xóa điều "khó khăn" như vậy không: khi một số "nhân vật phản diện-ứng dụng" (python script, WindowDetective, ..) cố gắng đọc bất kỳ dữ liệu nào (hwnd, class, text, smth. Else) từ "victim-app" (Chrome , IE, "SomeParanoidApp") là nó có thể là "nạn nhân" có thể cảm thấy/xem/kiểm tra xem ih đã được quét? – akaRem
Điều này chỉ áp dụng trên nền tảng Windows hoặc thư viện này hoạt động trên các nền tảng? Nếu không, có thư viện tương đương nào cho Mac OS không. –