今回は、Python×Seleniumでブラウザを起動する際に使えるオプションをまとめます。
- 起動時オプションとは?
- 基本となるコード※これをコピペして使ってください
- 起動時オプション一覧
- ヘッドレスモード(画面なし)で起動
- 終了後もブラウザを開いたままにする
- シークレットモードで起動
- ウインドウを最大化して起動
- ウインドウサイズを指定して起動
- 「Chromeは自動テストソフトウェア~」を非表示で起動
- ユーザーエージェントを指定して起動
- 全ての拡張機能を無効化して実行
- 拡張機能を指定して実行
- 通知ポップアップを無効化して起動
- パスワード保存ポップアップを無効化して起動
- ダウンロード先ディレクトリを指定して起動
- サンドボックスモードを解除して起動
- フェイクデバイスで起動
- カメラを使用しますか?ポップアップを無視して起動
- プロキシサーバーを設定して起動
- /dev/shmを使用せず起動
- GPUの利用を無効にして起動
- SSL化していないサイトの警告を無視して開く
- まとめ
起動時オプションとは?
Seleniumの起動時オプションとは、ブラウザを起動する際に追加で設定できるオプションのことです。たとえば、「Seleniumをバックグラウンドで起動する」「シークレットモードで起動する」などが実現可能です。
テスト時の細かな設定ができたり、オプションなしではエラーになるスクレイピングが可能になったりと、Seleniumを扱うなら知っておいて損はありません。
基本となるコード※これをコピペして使ってください
こちらに、ベースとなるソースコードを載せます。本記事で紹介する内容は、ここに追加していくことでコピペで動かすことが可能です。
オプションを追加する際は、「# ▼以下にオプション設定を追加します」の下に追加してください。オプションを使わず実行する場合は追加した行をコメントアウトすればOKです。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
options = Options()
# ▼以下にオプション設定を追加します
# ブラウザを起動
driver = webdriver.Chrome(options = options)
# Googleを開く
driver.get('https://www.yahoo.co.jp/')
# 「ショッピング」の要素を取得
elem = driver.find_element(By.XPATH, '//*[@id="ToolList"]/ul/li[1]/div/a/p/span[1]/span')
print(elem.text)
time.sleep(3)
# ブラウザを閉じる
driver.quit()
起動時オプション一覧
ここからは、Seleniumの起動時オプションを一つずつ紹介していきます。
ヘッドレスモード(画面なし)で起動
ヘッドレスモードとは、Selenium実行時にブラウザを表示せずバックグラウンドで実行するモードです。通常モードよりも高速化・軽量化を実現できます。
ヘッドレスモード関する詳しい内容は、こちらの記事で解説しています。
終了後もブラウザを開いたままにする
終了後もブラウザを開いたままにするには、以下のオプションを設定します。
シークレットモードで起動
ブラウザをシークレットモードで起動でする場合には、以下のようにオプションを指定します。
ウインドウを最大化して起動
Selenium内でもウインドウサイズの指定は可能ですが、こちらのオプションでは起動時から最大化した状態にすることができます。
ウインドウサイズを指定して起動
ウインドウサイズをpx単位で指定して起動します。
「Chromeは自動テストソフトウェア~」を非表示で起動
「Chromeは自動テストソフトウェアによって制御されています」という表示をなしにする場合、以下のオプションを設定します。手順書や仕様書を作る際のキャプチャを撮りたい場合などに便利です。
ユーザーエージェントを指定して起動
ユーザーエージェント確認方法
以下のサイトで偽装したいUAの文字列をコピーします。
UA確認サイト:https://www.useragents.me/
正しくUAが設定されたか確認する方法
Seleniumを起動して、開発者ツール>consoleに以下を打ち込んでEnterを押します。
navigator.userAgent
UAについて補足
ユーザーエージェント(UA)というのは、Webサイトを閲覧しているユーザーのブラウザやデバイス、OSなどのことです。
この情報をもとに、「スマホでアクセスしてるみたいだからスマホ版のサイトを表示しよう!」「ボットからのアクセスみたいだから、アクセスを拒否しよう・・・!」と、Webサイト側で制御しています。
で、このユーザーエージェントというのはあくまで自己申告の情報であり、実際とは異なる情報に変更することも可能です。これを活かして(!?)、スクレイピング時のアクセス拒否を回避したり、テストを行ったりします。
全ての拡張機能を無効化して実行
Seleniumを普通に実行する場合はログアウトされたクリーンな状態で起動されるため、このオプションを指定しても何の意味もありません。
しかし、ブラウザのユーザープロファイルを指定してSeleniumを実行している場合、アカウントに紐づく履歴やブックマーク、拡張機能などが保持された状態で起動されます。もし、ユーザープロファイルを指定しつつ、特定の処理だけクリーンな状態で実行したい場合などに便利なオプションです。
拡張機能を指定して実行
拡張機能を指定して実行する場合、以下のオプションを指定します。
このとき、指定する拡張機能はパッケージ化しておく必要があります。
アドレスバーに「chrome://extensions」と入力し、拡張機能の管理画面を開きます。「デベロッパーモード」をオンにします。
「拡張機能をパッケージ化」を押します。
「拡張機能のルートディレクトリ」に、拡張機能がある場所を指定します。
拡張機能は以下フォルダに格納されています。
C:\Users\ユーザー名\AppData\Local\Google\Chrome\User Data\Default\Extensions\バージョン名
拡張機能のパスをpathに指定して実行します。
通知ポップアップを無効化して起動
通知ポップアップを無効化して起動する場合には、以下のオプションを指定します。
「通知ポップアップ」というのは、ブラウザ上にポップアップで表示される「通知を許可する」と書かれた通知のことです。これが出てブラウザ操作がうまくいかない場合、無効化すると良いです。
パスワード保存ポップアップを無効化して起動
パスワード保存ポップアップを無効化して起動したい場合は、以下オプションを指定します。
パスワード保存ポップアップは、ブラウザ上にポップアップで「Google Chromeでこのサイトのパスワードを保存しますか?」と表示されるものです。こちらもブラウザ操作に支障がある場合無効化するとよいでしょう。
ダウンロード先ディレクトリを指定して起動
ダウンロード先ディレクトリを指定して起動する場合、以下オプションを使用します。
コード内でもダウンロード先を設定することができますが、このオプションではでSeleniumを起動する際のデフォルトのディレクトリがここで指定したものになるイメージです。
本来、Chromeでダウンロードした際の保存先は「設定」で指定されていますが、これが実行時のみ指定したものに変わります。
サンドボックスモードを解除して起動
サンドボックスモードを解除してSeleniumを起動するには、以下のオプションを指定します。
Seleniumでは、セキュリティを高める目的から「サンドボックス」という環境で起動されます。こちらも普通に起動するぶんには意識することのない内容になりますが、Docker環境で起動する場合このオプションを指定する必要があります。
フェイクデバイスで起動
ダミーのカメラ・マイクでSeleniumを起動するには、以下オプションを指定します。
WebRTCという、音声や動画などのデータをリアルタイムに送受信できる技術がありますが、これに関するテストを行う際に、実際にカメラやマイクを用意しなくてもテストできるようになります。
カメラを使用しますか?ポップアップを無視して起動
フェイクデバイスで起動(–use-fake-device-for-media-stream)をしている際に有効となるオプションです。
本来、WebRTCなどを使用する際には「カメラを使用しますか?」というポップアップが表示され、許可する必要があります。このオプションを設定すると、これを無視して起動することができます。
プロキシサーバーを設定して起動
プロキシサーバーを設定して起動する場合は、以下オプションを設定します。
proxy_host = 'プロキシサーバーのIPアドレス'
proxy_port = 8080 # ポート番号をプロキシサーバーの設定に合わせて変更してください
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s:%s' % (proxy_host, proxy_port))
プロキシサーバーの認証
プロキシサーバーの認証が必要な場合は、以下のオプションを指定します。
proxy_username = 'ユーザー名' # プロキシサーバーのユーザー名を指定
proxy_password = 'パスワード' # プロキシサーバーのパスワードを指定
proxy_auth = f'{proxy_username}:{proxy_password}'
chrome_options.add_argument(f'--proxy-auth={proxy_auth}')
/dev/shmを使用せず起動
/dev/shmを使用せず起動する場合、以下のオプションを指定します。
Dockerではメモリを/dev/shmという領域に格納しますが、デフォルトの容量が小さいためクラッシュすることがあります。このオプションを使うと/tmpを使うようになるため、クラッシュを防ぐことができます。
GPUの利用を無効にして起動
GPUの利用を無効にして起動するには、以下のオプションを指定します。
Chromeでは、GPUを利用して画像・動画の処理パフォーマンスを高めることができます。しかし、GPUが搭載されていないPCや、仮想環境などでGPUが認識されていない/使えない場合、オフにして起動したほうが安定して動くようになる場合があります。
SSL化していないサイトの警告を無視して開く
SSL化していないサイトで出る警告を無視して開く場合、以下のオプションを設定します。
SSL化とは、インターネット上でデータを暗号化して送受信するしくみです。SSL化されているサイトはアドレスが「https〜」となっています。SSL化していないサイトは、ブラウザによっては警告が出ることがあり、Seleniumで自動操作する際にこの警告が出てしまうと意図した操作ができない可能性があります。
この警告を出さずに対象のページを開きたい場合にこのオプションを指定します。なお、信頼性の低いサイトや情報漏洩の危険があるサイトにアクセスする場合には十分に注意して実行する必要があります。
まとめ
今回は、Python×Seleniumでブラウザを起動する際に使えるオプションについて解説しました。
テストやスクレイピング等、様々な用途でSeleniumのオプションが役に立ちますので、是非参考にしてみてください。
コメント