タグ:Chrome Extension | selenium
seleniumでヘッドレスChromeブラウザを立ち上げながら自動操作をしていく流れの中で
Chrome拡張機能を噛ませたいシチュエーションがあったんですが、結構ハマったのと
色々なシーンでの可能性を見出したのでメモ。
seleniumドライバとして立ち上げるChromeは通常使ってるChromeブラウザとは異なるものなので、入れてる拡張機能は同期されていません。
まずはヘッドレスブラウザに拡張機能を読み込ませた状態で起動できるようにしましょう。
普段使ってるChromeブラウザに入っている拡張機能をそのまま利用する場合は、まず拡張機能がインストールされている場所を確認します。
Chromeの設定アイコン → 「その他のツール」 → 「拡張機能」で現在インストールしている拡張機能一覧ページに行きますのでその一覧にIDが記されています。
読み込ませたい拡張機能のIDがわかったら次は保管場所を確認します。
# Mac /Users/(ユーザ名)/Library/Application/Support/Google/Chrome/Default/Extensions # Windows C:\Users\(ユーザ名)\AppData\Local\Google\Chrome\User\Data\Default\Extensions
普段のChromeブラウザには入ってなくても大丈夫。むしろこのアプリにしか利用しない!
という場合は、拡張機能の元ファイルである"crx"ファイルをダウンロードして実行ディレクトリにファイルごと保管してしまいましょう!
ただChromeブラウザで拡張機能のページにアクセスすると、直接Chromeに追加されてしまうので
拡張機能の元crxファイルをダウンロードしてくれる拡張機能 を入れます。まぎらわしい表現ですが、それ以外表現できないw
ダウンロードした「◯◯◯.crx」ファイルをアプリフォルダ内の「extention」フォルダにでも入れておきましょう。
import os # ディレクトリの操作用 from selenium.webdriver import Chrome, ChromeOptions # ヘッドレスブラウザ from selenium.webdriver.chrome.options import Options options = ChromeOptions() options.add_extension("拡張機能のパス") driver = Chrome("chromedriverのパス", options=options) url = "http://tokidoki-web.com" driver.get(url)
これでChrome拡張を読み込んだChromeヘッドレスブラウザが立ち上がりました!
ここまでは簡単に実装できたと思います。
けど待てよ?拡張機能自体はどうやって起動させんだ?
seleniumはウィンドウ内のドキュメントしか操作できないぞ・・・アクションボタンは
ウィンドウの外の世界・・・オワタ・・・
色々と調べるとpythonの標準ライブラリにGUI操作のパッケージがありました!
これでアクションボタン表示されるでポップアップ内のクリックオペレーションを操作していきます。
マウスのクリックをディスプレイの座標位置から操作をしていくため、
起動のたびにクリックが空振りしないようにブラウザの立ち上げ位置やブラウザサイズを固定にしておく必要があります。
driver.set_window_position(0,0) # ブラウザの位置を左上に固定 driver.set_window_size(600,740) # ブラウザのウィンドウサイズを固定
import os # ディレクトリの操作用 from selenium.webdriver import Chrome, ChromeOptions # ヘッドレスブラウザ from selenium.webdriver.chrome.options import Options import time # 処理待機用 import pyautogui # Chrome拡張のアクションボタンクリック用 options = ChromeOptions() options.add_extension("拡張機能のパス") driver = Chrome("chromedriverのパス", options=options) driver.set_window_position(0,0) # ブラウザの位置を左上に固定 driver.set_window_size(600,740) # ブラウザのウィンドウサイズを固定 url = "http://tokidoki-web.com" driver.get(url) # 拡張機能のアクションボタンをクリック time.sleep(2) print("拡張機能ON") # ディスプレイ位置から左550px、上80pxの位置で1回クリックして1秒待機 pyautogui.click(550, 80, 1, 1, 'left') # ポップアップ内の要素をクリック time.sleep(2) print("ポップアップ内クリック") # ディスプレイ位置から左450px、上430pxの位置で1回クリックして1秒待機 pyautogui.click(450, 430, 1, 1, 'left') time.sleep(5) """ 以降のクライアント先ページへの処理 """
これでアクションボタンから拡張機能をONにしてポップアップ内の要素クリックが可能になります!