VBA+SeleniumBasicで検索順位チェッカー作成
VBAでSeleniumBasicを使って検索順位チェッカーを作ってみます。
SEO対策として各キーワードでの検索順位チェックは欠かせませんが、
簡単に使えてキーワードを大量に指定できる良いツールがなかなかありません。
掲載したVBAコードの利用については、各自のご判断でお願いします。
そこで、エクセルVBAでSeleniumBasicを使い、Googleの検索結果から順位を取得するVBAを作成してみました。
Seleniumについて
今回は技術解説というより、上記記事の実践編サンプルとしての位置づけになります。
コードだけを掲載しておきますので参考にしてください。
css selectorや、class,tagについては、chromeデベロッパーツールで確認してください。
VBA自体は難しいものではないと思います。
作成時間の多くは、対象の適切なエレメントを探す時間に費やされることになります。
シート構成
A4~:キーワード(個数制限なし)
B3:取得日
C4~:検索結果に掲載されているページタイトル
B4~:検索結果に掲載されているページURL
E列以降:前回以前の順位履歴
検索順位チェッカーのVBA全コード
Option Explicit
Private Driver As Selenium.WebDriver
Private Const gUrl As String = "https://www.google.co.jp/"
'検索ボックスのCSS selector
Private Const gSearch As String = "#tsf > div:nth-child(2) > div > div.RNNXgb > div > div.a4bIc > input"
Sub RankCheker()
'起動シートの初期処理
Dim ws As Worksheet
Set ws = ActiveSheet
Dim siteUrl As String
siteUrl = ws.Range("C1") 'サイトURL
'Seleniumの初期処理
Dim sKey As New Selenium.Keys
Dim elm As Selenium.WebElement
Set Driver = New Selenium.WebDriver
Driver.Start "chrome"
Dim i As Long
Dim cntRank As Long
With ws
'前回実行日は前日以前なら履歴を残す
If .Range("B3").Value < Date Then
.Columns("E").Insert
Intersect(.Range("A3").CurrentRegion, .Columns("B")).Copy _
Destination:=.Range("E3")
.Columns("E").AutoFit
End If
'出力範囲を初期クリア
.Range("A3").CurrentRegion.Offset(1, 1).Resize(, 3).ClearContents
For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
Driver.Get gUrl
Set elm = Driver.FindElementByCss(gSearch)
'検索ボックスへキーワード送信
elm.Clear
elm.SendKeys .Cells(i, 1)
elm.SendKeys sKey.Enter
'検索結果からサイト掲載要素を取得
Set elm = getElement(siteUrl, _
.Cells(i, 1).Value, _
cntRank)
If Not elm Is Nothing Then
.Cells(i, 2) = cntRank
.Cells(i, 3) = elm.FindElementByTag("h3").Text
.Cells(i, 4) = elm.Attribute("href")
Else
.Cells(i, 2) = "圏外"
End If
Next
'実行日設定
.Range("B3") = Date
End With
'終了処理:Close,Quitは無くても良いけど
Driver.Close
Driver.Quit
Set Driver = Nothing
MsgBox "取得完了"
End Sub
'指定selectorの要素を取得:ページ内に無い場合は「次へ」
Private Function getElement(ByVal siteUrl As String, _
ByVal sCss As String, _
ByRef cntRank As Long) _
As Selenium.WebElement
Set getElement = Nothing
Dim elm As Selenium.WebElement
Dim elms As Selenium.WebElements
Dim cntPage As Long
cntRank = 0
On Error Resume Next
Do
'検索結果表示領域全体:キーワードにより表示が違う場合あり
Set elm = Driver.FindElementByCss("#rso > div:nth-child(2) > div")
If Err Then
Err.Clear
Set elm = Driver.FindElementByCss("#rso > div > div")
If Err Then
Exit Function
End If
End If
'10件表示が<div class="g">で繰り返されている
Set elms = elm.FindElementsByClass("g")
If Err Then Exit Function
For Each elm In elms
cntRank = cntRank + 1
'<div class="g">の中に入っているので
Set elm = elm.FindElementByClass("r").FindElementByTag("a")
If Err Then Exit Function
If elm.Attribute("href") Like siteUrl & "*" Then
Set getElement = elm
Exit Function
End If
Next
'100位まで
cntPage = cntPage + 1
If cntPage >= 10 Then
Exit Function
End If
Driver.FindElementByLinkText("次へ").Click
If Err Then
Exit Function
End If
Loop
End Function
動作が安定しないときは、画面切り替わり直後に適宜待ち時間を入れてください。
Driver.Wait ミリ秒
Google検索のスクレイピングはGoogle利用規約に反する可能性もあり、
過度な検索実行は控えてください。
最後に
お好みに合わせて変更し、上手く使えば結構役に立つツールにできると思います。
同じテーマ「マクロVBA技術解説」の記事
VBAでのSQLの基礎(SQL:Structured Query Language)
VBA+SeleniumBasicで検索順位チェッカー(改)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブック・シートの選択(Select,Activate)|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBA+SeleniumBasicで検索順位チェッカー作成
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。