【VBA×Selenium】プルダウンを選択する方法
みなさんこんにちは。
Webスクレイピングをする際、
指定した要素がプルダウンだった場合、指定方法にはいくつかの手段があります。
今回は、Webページの要素でプルダウンを選択したいときの、
AsSelect.SelectBy系のメソッドの使用方法についてご紹介したいと思います。
この記事はこんな人におすすめ
この記事はこんな人におすすめです!
- VBAプログラミング:初級者~中級者
- Webスクレイピング初学者
- コードだけサクッと取得したい人
- 効率の良いコードを書きたい人
といったところでしょうか。
プルダウンの選択方法を知るメリット
プルダウンの選択方法を知るメリットは以下のとおりです。
コードの可読性向上
汎用性が高く他のサイトにも応用が利く
Webスクレイピングの基本が定着する
予期せぬエラーの回避
といったところでしょうか。
スクレイピングをする際は、様々なサイトに対してスクレイピングを実施することが多いので、
一度やり方を覚えてしまえばかなり有効的なスキルになるかと思います。
プルダウンの選択方法について
プルダウンの選択方法の種類
Webページの要素で プルダウンを選択したい場合、AsSelect.SelectBy系のメソッドを使用します。
メソッドは以下のになります。
driver.FindElementByXPath("ほげ").AsSelect.SelectByValue ("ふが")
driver.FindElementByXPath("ほげ").AsSelect.SelectByText ("ふが")
driver.FindElementByXPath("ほげ").AsSelect.SelectByIndex ("ふが")
※ほげにはプルダウンのXpathを記載します。
※ふがについては、あとで説明します
例えば、以下のサイト内にあるプルダウンの構成を
デベロッパーツールを使用すると以下のように構成されています。
そしてデベロッパーツールの内容を簡潔に表示すると以下のようになります。
<select name="test">
<option value="0">こだわらない</option>
<option value="1">東京23区</option>
<option value="2">東京23区外</option>
<option value="3">神奈川県</option>
<option value="4">埼玉県</option>
<option value="5">千葉県</option>
</select>
AsSelect.SelectBy系のメソッドの使用例
SelectByValueについて
Valueの記載がある通り、プルダウンのHTMLのを指定する方法です。
今回はvalue=”1″という記述のため、
以下のように数字を指定することで解決します。
' 東京23区 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByValue ("1")
' 千葉県 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByValue ("5")
SelectByTextについて
Textの記載がある通り、プルダウンで表示されるテキスト情報「東京23区」、「東京23区外」など
表示されているテキストの記載を直接指定する方法です。
以下のようにテキストの文言を指定することで解決します。
' 東京23区 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByText ("東京23区")
' 千葉県 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByText ("千葉県")
SelectByIndexについて
こちらはプルダウンの要素番号を直接指定する方法になります。
例えば、「東京23区」を指定したい場合は、1番目の要素に該当するので1を、
「千葉県」を指定したい場合は、5番目の要素に該当するので5を指定することで解決します。
' 東京23区 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByIndex ("1")
' 千葉県 を指定したい場合
driver.FindElementByXPath("ほげ").AsSelect.SelectByIndex ("5")
コードのご紹介
今までの内容をコードで表現すると以下のようになります。
'///////////////////////////////////////////////////////////////
' テストプログラム
'///////////////////////////////////////////////////////////////
Sub Main()
Dim driver As New Selenium.WebDriver
Dim strXpath As String
Dim strBuff As String
' ブラウザを起動する
With driver
.Start "Chrome" 'クロームブラウザを立ち上げます。
.Get "https://www.1150job.com/"
' プルダウンのXpathを指定します。
strXpath = "/html/body/div[10]/div[2]/div/form/div/div[2]/select"
' SelectByValueの使用例
' 東京23区 を指定したい場合
.FindElementByXPath(strXpath).AsSelect.SelectByValue ("1")
' 千葉県 を指定したい場合
.FindElementByXPath(strXpath).AsSelect.SelectByValue ("5")
' SelectByTextの使用例
' 東京23区 を指定したい場合
.FindElementByXPath(strXpath).AsSelect.SelectByText ("東京23区")
' 千葉県 を指定したい場合
.FindElementByXPath(strXpath).AsSelect.SelectByText ("千葉県")
' SelectByIndexの使用例
' 東京23区 を指定したい場合
driver.FindElementByXPath(strXpath).AsSelect.SelectByIndex ("1")
' 千葉県 を指定したい場合
driver.FindElementByXPath(strXpath).AsSelect.SelectByIndex ("5")
' ブラウザを閉じる
driver.Close
Set driver = Nothing 'driveをリセットする
MsgBox "終了しました。"
End With
End Sub
xpathの指定方法については過去のブログでもご紹介しております。
最後に
いかがでしたでしょうか。
スクレイピングをやっていると必ず、プルダウンの指定方法にぶちあたるかと思います。
プルダウンはテキストボックスやボタンクリックよりは頻度が少ない(私の肌感覚)であるため、
たまに指定方法を忘れてしまうこともしばしば見られるかもしれません。
覚えておいて損はしないスキルになりますので、
ご興味のある方は是非!!!!
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、依頼したり、何か聞きたいことがあったりしたら
いつでもお気軽にご相談ください。
また、内容についてご不明点があればメッセージをいただけると幸いです。
Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!