1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google検索結果をスクリーンショット エクセルでお気軽RPA③

Posted at

概要

インストールしたSeleniumBasicを使って、実際にRPAを作ってみます。
インストール方法(Qiita記事)
この記事は、簡単なRPAを作成する手順を説明し、コードを提示することで、EXCELを使ったRPAを作れるということを知ってもらうのが目標になります。

要件定義

企業情報を収集するために、Googleの検索結果をスクリーンショットを取る。

設計

  1. ブラウザを立ち上げる
  2. Googleを開く
  3. Googleの検索ボックスに企業名を入力する
    • 企業名は、Sheet1のA列2行目から縦に入力されているとする
  4. 検索を実行する
  5. 検索結果が開いたら、スクリーンショットを取る。
  6. 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サイトにしてみたり、検索ではなく登録操作にしてみたりすることで、繰り返していることを自動化することができることが掴めてもらえると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?