SeleniumBasicでホームページを開き、Web要素キャッチ後に各種Web操作が可能になります。そこで、今回はSeleniumBaisicの操作(基礎編)第4回目として、下図Web操作フロー図の中の「クリック」について解説していきます。
ブラウザの起動 |
Web操作 |
ブラウザを閉じる |
Web要素のキャッチ |
ウィンドウの操作 |
フレームの移動 |
スクリーンショットの取得 |
HTML情報の取得 |
Cookie情報取得 |
クリック |
文字列入力 |
チェックボックス操作 |
ドラッグアンドドロップ |
ドロップダウンリスト選択 |
ダイアログボックスの操作 |
テーブルデータの取得 |
ファイルダウンロード |
Web要素のプロパティ取得 |
マクロファイルダウンロード
このページで掲載しているVBAのマクロファイルを以下リンクからダウンロードできます。必要に応じてファイルダウンロードして活用ください。
ダウンロードファイルのマクロ実行注意事項(ここをクリック)
ファイルダウンロード後、マクロ実行するまでの注意事項を記載しておきます。
マクロファイルを実行するには、事前にSeleniumBasicをインストールしておく必要があります。同時にChromeDriverを現在のChromeブラウザのバージョンに合わせて更新しておきます。SeleniumBasicのインストールとChromeDriverの更新については以下記事を参照ください。
マクロファイルを開き、「コンテンツの有効化」をクリックします。
Web上からダウンロードしたマクロファイルはデフォルトで実行できない様に設定されています。ダウンロードしたマクロファイルを開いて以下の様に(このファイルのソースが信頼できないため、Microsoftによりマクロの実行がブロックされました。)表示される場合はファイルプロパティを変更します。
ファイルプロパティを開いて、セキュリティ項目の「許可する」にチェックを入れ、「OK」をクリックする。
VBE(Visual Basic Editor)画面の参照設定を開き、「Selenium Type library」にチェックを入れて、OKをクリックします。
一度ファイルを閉じて、再度ファイルを開き、「コンテンツの有効化」をクリックします。その後、マクロ実行します。ダウンロードファイルは基本的に実行ボタンを実装していませんので、マクロファイルを実行するには、VBEを開き、デバッグ実行によって、スクリプト実行します。
Excelファイルを開いた後、Alt + F11にてVBEエディタを開き、該当のプロシージャまでカーソル移動して、F5にてデバッグ実行します。
Web要素のクリック(左クリック)
VBAコード
まずはVBAのコードを紹介します。
Private Sub FindElement_click()
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("Googleについて")
driver.Wait 2000
elm.Click
driver.Wait 2000
Stop
driver.Quit
End Sub
動作解説
Googleホーム画面から検索ボックスに文字列を入力して、検索実行するまでをSeleniumBasicで実行できる様にします。以下の様なステップを踏みます。イメージはクリックすると拡大表示されます。
1. Googleホームページを開く
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
ChromeDriverのインスタンス生成し、GoogleChromeを立ち上げます。これでChromeブラウザを操作できる様になります。このdriverオブジェクトで指定したURLのホームページを開く事ができる様になります。今回は、Googleホームページを指定しました。
2. リンクテキストのWeb要素キャッチ
Web要素のキャッチ + Web要素をelm変数に代入
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("Googleについて")
ChromeDriverクラスのFindElementByLinkTextメソッドを利用してWeb要素をキャッチします。また、elmオブジェクトに当該のWeb要素を代入します。メソッドの引数としてGoogleChromeホームページ左上に記載されている"Googleについて"のリンクテキストを検索してキャッチしています。
3. 待機(2秒)
driver.Wait 2000
ChromeDriverクラスのWaitメソッドを利用し、動作を2秒間(2000ミリ秒間)ストップしています。2秒間待機せずともSeleniumBasicは次の動作を実行してくれるのですが、待機時間を設けないとホームページが立ち上がってから即座にクリック動作されるので、動作状況(画面の変遷)を人間の目でも見やすくするため待機時間を設けています。
4. リンクテキストをクリックする
elm.Click
変数elmに代入したWebElementクラスでキャッチしたリンクテキストの"Googleについて"をクリックして、画面をリンク先に変遷させます。画面イメージは変遷後のページ画面です。
Web要素のクリック(特殊キー + 左クリック)
前段では単純な左クリックの動作を紹介しました。ここでは、特殊キー(Shift, Ctrl, Alt)を押しながらクリック動作する方法を紹介します。これらの操作ができる様になれば、Webスクレイピングでできることが増えますので、是非学習してみてください。構文自体は簡単です。
GoogleChromeブラウザ上で特殊キー+左クリックをすると、通常の左クリック動作とは異なる動作がショートカットで可能になります。以下ショートカット例です。
ショートカットコマンド | 解説 |
---|---|
Ctrl + 左クリック | 新規タブにリンク先ページを開く。(新規タブはバックグラウンドで開く。) |
Shift + 左クリック | 新規ウィンドウにリンク先ページを開く。 |
Alt + 左クリック | リンクテキストをクリックすると、リンク先を開くかずにリンク先のダウンロードを開始する。 |
Ctrl + Shift + 左クリック | 新規タブにリンク先ページを開く。(新規タブはリンク先を開く。) |
特殊キー+左クリックの動作は以下構文で実行できます。
Webelemet.Click <特殊キー>
これだけではよく分からないと思いますので、「習うより慣れろ」という事で以下具体例を見ながら動作方法を確認してみてください。
Ctrl + 左クリック(新規タブを開く)
「Ctrl + 左クリック」で新規タブにリンク先ページを開きます。(新規タブはバックグラウンドで開きます。)
Private Sub FindElement_click_Ctrl()
Dim keys As New keys
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("Googleについて")
driver.Wait 2000
elm.Click keys.Control
driver.Wait 2000
Stop
driver.Quit
End Sub
ここで肝になる実行文は2行目と8行目の命令文です。
Dim keys As New keys
ShiftやCtrl等の特殊文字を入力するためにDim KeysでKeysクラスのインスタンスを生成して、特殊文字を入力できる準備をしています。Keysクラスで入力できる特殊文字列の一覧はこちらから確認できます。
elm.Click keys.Control
「elm.Click <特殊キー>」の構文でCtrl+左クリックを実行しています。
Shift+ 左クリック(新規ウィンドウを開く)
「Shift + 左クリック」で新規ウィンドウにリンク先ページを開きます。
Private Sub FindElement_click_Shift()
Dim keys As New keys
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("Googleについて")
driver.Wait 2000
elm.Click keys.Shift
driver.Wait 2000
Stop
driver.Quit
End Sub
Ctrl+左クリックの解説と同様、肝になる実行文は2行目と8行目の命令文です。(2行目の解説はCtrl+左クリックと同様ですので割愛します。)
elm.Click keys.Shift
「elm.Click <特殊キー>」の構文でShift+左クリックを実行しています。
Alt + 左クリック(リンク先をダウンロード)
「Alt + 左クリック」でリンクテキストをクリックすると、リンク先を開くかずにリンク先のダウンロードを開始します。本来はもう少し細かく設定が必要なのですが、ここではAlt + 左クリックでダウンロードができる、と思っててください。
Private Sub FindElement_click_Alt()
Dim keys As New keys
Dim driver As New ChromeDriver
driver.Get "https://policies.google.com/terms?hl=ja"
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("PDF をダウンロード")
driver.Wait 2000
elm.Click keys.Alt
driver.Wait 2000
Stop
driver.Quit
End Sub
Ctrl+左クリックの解説と同様、肝になる実行文は2行目と8行目の命令文です。(2行目の解説はCtrl+左クリックと同様ですので割愛します。)
elm.Click keys.Alt
「elm.Click <特殊キー>」の構文でAlt+左クリックを実行しています。
Ctrl + Shift + 左クリック(新規タブを開く+新規タブへ移動)
「Ctrl + Shift + 左クリック」で新規タブにリンク先ページを開きます。新規タブはリンク先を開きます。CtrlとShiftを同時に押下しなければなりません。「elm.Click <特殊キー>」の構文では一度に一つの特殊キーしか押下できませんので、構文を「&」で繋げます。構文を公式化すると以下の表現になります。
Webelemet.Click <特殊キー> & <特殊キー>
以下、構文例です。
Private Sub FindElement_click_CtrlShift()
Dim keys As New keys
Dim driver As New ChromeDriver
driver.Get "https://www.google.co.jp"
Dim elm As WebElement
Set elm = driver.FindElementByLinkText("Googleについて")
driver.Wait 2000
elm.Click keys.Control & keys.Shift
driver.Wait 2000
Stop
driver.Quit
End Sub
Ctrl+左クリックの解説と同様、肝になる実行文は2行目と8行目の命令文です。(2行目の解説はCtrl+左クリックと同様ですので割愛します。)
elm.Click keys.Control & keys.Shift