前提・実現したいこと
- 既に起動しているアプリケーションのうち,Chrome(叶うなら他のブラウザも)を検出した際に開いているページのURLを取得する.
- Python3.7で実装.
- OSは,まずはWindows10 64bitの場合のみ
- 既に起動しているアプリを監視するものなので,
Selenium
を用いてウェブドライバを起動する方法は取らない
やったこと
win32gui
モジュールでアクティブタブの変動検出 -> Done- アクティブタブの実行ファイル名の取得 -> Done
- アクティブタブのステータスバーのテキスト取得(Chromeの場合はページのタイトルだった) -> Done
- Chromeだった場合の開いているページのURLの取得 -> 聞きたいのはここ
該当のソースコード
Python
1import platform 2from datetime import datetime 3import time 4import psutil 5 6os = platform.platform(terse=True) 7if "Windows" in os: 8 import win32gui as wg 9 import win32process as wp 10 # import win32com.client as wcli 11 # import win32con as wc 12 13 recent_active_pid = -1 14 try: 15 while True: 16 # ForegroundWindowのオブジェクト取得 17 fw = wg.GetForegroundWindow() 18 # pidの取得 19 active_pid = wp.GetWindowThreadProcessId(fw)[-1] 20 if active_pid is not recent_active_pid: 21 recent_active_pid = active_pid 22 # fwの実行ファイル名の取得 23 active_name = psutil.Process(recent_active_pid).name() 24 # fwのステータスバーのテキスト取得 25 tab_text = wg.GetWindowText(fw) 26 27 ''' 28 ######################################################## 29 if "CHROME" in active_name.upper(): # Chromeなら 30 # ここでページのURLの取得処理を実装したい 31 # else: 32 ######################################################## 33 ''' 34 35 print("{time}: {pid}: {active_name}({tab_text})".format( 36 time=datetime.now().strftime("%H:%M:%S.%f"), 37 pid=recent_active_pid, 38 active_name=active_name, 39 tab_text=tab_text)) 40 time.sleep(1) 41 except KeyboardInterrupt: 42 print("Exit")
試したこと
URL取得のための自作関数と思ったけど,win32gui.GetWindowText
(ステータスバーのテキスト取得)の代わりでしか無かった.
↓上記リンクを参考に実装したコード↓
Python
1def getWindowText(fw): 2 buf_size = 1 + wg.SendMessage(fw, wc.WM_GETTEXTLENGTH, 0, 0) 3 buf = wg.PyMakeBuffer(buf_size) 4 wg.SendMessage(fw, wc.WM_GETTEXT, buf_size, buf) 5 try: 6 return str(buf, encoding="utf-8", errors="replace") 7 except Exception as e: 8 print(e) 9 exit()
win32com.client
モジュールを使う方法.
しかしHow can I dispatch Firefox or Google Chrome with Python?
にあるようにIEのみ対応でChromeで使えないらしい.
あなたの回答
tips
プレビュー