2018

4

21

seleniumのChromeヘッドレスブラウザで拡張機能を自動実行させてやんよ!!!

タグ: |

Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

seleniumでヘッドレスChromeブラウザを立ち上げながら自動操作をしていく流れの中で
Chrome拡張機能を噛ませたいシチュエーションがあったんですが、結構ハマったのと
色々なシーンでの可能性を見出したのでメモ。

Chromeアドオンを実装したヘッドレスブラウザの起動

seleniumドライバとして立ち上げるChromeは通常使ってるChromeブラウザとは異なるものなので、入れてる拡張機能は同期されていません

まずはヘッドレスブラウザに拡張機能を読み込ませた状態で起動できるようにしましょう。

通常使ってる拡張機能を併用する場合

普段使ってるChromeブラウザに入っている拡張機能をそのまま利用する場合は、まず拡張機能がインストールされている場所を確認します。

拡張機能のID確認と保管場所

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

GET CRX

  • 「GET CRX」を普通にChromeに追加
  • 元ファイルが欲しい拡張機能のウェブページにアクセス
  • そのページにアクセスした状態で「GET CRX」のアクションボタンをクリック
  • 「Get CRX of this extension」をクリック

ダウンロードした「◯◯◯.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ヘッドレスブラウザが立ち上がりました!

Chromeヘッドレスブラウザ内で自動で拡張機能を操作

ここまでは簡単に実装できたと思います。

けど待てよ?拡張機能自体はどうやって起動させんだ?
seleniumはウィンドウ内のドキュメントしか操作できないぞ・・・アクションボタンは
ウィンドウの外の世界・・・オワタ・・・

色々と調べるとpythonの標準ライブラリにGUI操作のパッケージがありました!

PyAutoGUI

これでアクションボタン表示されるでポップアップ内のクリックオペレーションを操作していきます。

マウスのクリックをディスプレイの座標位置から操作をしていくため、
起動のたびにクリックが空振りしないようにブラウザの立ち上げ位置やブラウザサイズを固定にしておく必要があります。

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にしてポップアップ内の要素クリックが可能になります!

Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

トップへ