概要
インストールしたSeleniumBasicを使って、実際にRPAを作ってみます。
インストール方法(Qiita記事)
この記事は、簡単なRPAを作成する手順を説明し、コードを提示することで、EXCELを使ったRPAを作れるということを知ってもらうのが目標になります。
要件定義
企業情報を収集するために、Googleの検索結果をスクリーンショットを取る。
設計
- ブラウザを立ち上げる
- Googleを開く
- Googleの検索ボックスに企業名を入力する
- 企業名は、Sheet1のA列2行目から縦に入力されているとする
- 検索を実行する
- 検索結果が開いたら、スクリーンショットを取る。
- Sheet1のA列に文字が入力されていれば、3に戻る。ブランクであれば、終了
コード
Sub main()
' Chrome driverの定義
Dim driver As New Selenium.ChromeDriver
' 検索語句の記載されているシート(Sheet1)
Dim ws_data As Worksheet
Dim row As Long
' EXCELシートの非表示、画面更新停止
ActiveWindow.WindowState = xlMinimized
Application.ScreenUpdating = False
Set ws_data = ThisWorkbook.Worksheets("Sheet1")
' ドライバー=ブラウザの起動→Googleを開く
' ①
driver.Start
driver.Get "https://www.google.com/?hl=ja"
row = 1
Do While ws_data.Cells(row, 1) <> ""
' getSSInGoogle関数で、検索とスクリーンショットを取る操作を定義
Call getSSInGoogle(driver, ws_data.Cells(row, 1).Value)
row = row + 1
driver.Wait 1000
Loop
' ブラウザを終了させる
driver.Quit
MsgBox "終了しました"
' EXCELシートの表示、画面更新再開
ActiveWindow.WindowState = xlNormal
Application.ScreenUpdating = True
End Sub
' ドライバーとキーワードを引き渡して、Googleで検索→スクリーンショットを取る
Function getSSInGoogle(driver As WebDriver, keyword As String)
Dim ks As New Keys
Dim h As Long
Dim w As Long
driver.FindElementByName("q").Clear
driver.FindElementByName("q").SendKeys keyword
driver.SendKeys (ks.Enter)
' ②
driver.TakeScreenshot.SaveAs ThisWorkbook.Path & "\ss\" & keyword & ".png"
driver.Wait 1000
End Function
ヘッドレスブラウザ
SeleniumBasicのスクリーンショットではあくまでもブラウザを開いた状態になるため、見えている範囲のみになります。そのため、縦スクロールするページは途中で切れてしまいます。それを防ぐにはヘッドレスブラウザを使うと便利です。
ヘッドレスブラウザとは、ユーザインタフェースのないブラウザのことです。簡単には、画面表示がないブラウザと考えてもらって大丈夫です。画面表示がないので、実際に使用しているPCの画面サイズを超えた表示領域にすることで、縦スクロールなしの表示をスクリーンショットが取れます。
上記コードの①と②に下記を追加します。
' ①:ヘッドレスブラウザにする
driver.AddArgument "--headless"
driver.AddArgument "--disable-gpu"
driver.AddArgument "--window-size=1024,768"
' ②:表示しているページの縦と横幅を取得して、ウィンドウのサイズにセット
h = driver.ExecuteScript("return document.body.scrollHeight")
w = driver.ExecuteScript("return document.body.scrollWidth")
driver.Window.SetSize w, h
まとめ
かなり簡易的な例ですが、RPAを作ることができました。今回はGoogleの検索結果ですが、別のWebサイトにしてみたり、検索ではなく登録操作にしてみたりすることで、繰り返していることを自動化することができることが掴めてもらえると幸いです。