0
4

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 5 years have passed since last update.

Katalon、VBAを使用してWEBスクレイピング

Last updated at Posted at 2019-11-13

背景

更新される商品を、定期的にメーカーのサイトからスクレイピングする要望があがった。

そのサイトは、

・ダウンロードをするのに「利用規約に同意」ボタンを押す
・「ダウンロード」ボタンを押す

といったイベントが発生するので、VBAを使用して対応しようとしたが、これがうまく稼働しなかったので、WEBテストツールのKatalon、KatalonStudioを使用した。

1.URLパラメータを取得

ダウンロードURLは、2つのHTMLパラメータを含んでいたため、VBAを使用してパラメータを取得し、
CSVへ出力する処理をまずは実装した。

以下のようなファンクションを作成し、商品掲載URLをパラメータとして渡して、ダウンロードURLのクエリパラメータをCSVへ出力した。
自動ダウンロード先のURLにセットするURLパラメータをCSVに出力する。
getElementByあたりは、それぞれのサイトの環境ごとにカスタマイズ。

Function xxxxx_data(xxxxxx_url As String, output As String, objIE As Object)

Dim htmldoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
Set htmldoc = seturl(xxxxx_url, objIE)

Dim count As Integer
count = Replace(htmldoc.getElementsByClassName("hitCount")(0).outerText, "該当製品数:", "")

Dim array1 As Variant
array1 = Array(): ReDim array1(count - 1)
Dim i As Integer
Dim s As Integer
Dim id1 As String
i = 0
s = 0

'URLを取得
    For i = 0 To count - 1
    id1 = "r" & i
    array1(i) = htmldoc.getElementById(id1).getElementsByClassName("datacell")(2).getElementsByTagName("a")
    Next i

'ファイルに出力
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
     
    stream.Type = 2
    stream.Charset = "Shift_JIS"
    stream.LineSeparator = 10
    stream.Open
    stream.Position = 0

    Dim str1 As String
    Dim str2 As String
    Dim str3 As String
    
    For i = 0 To count - 1 - s
    If (array1(i) Is Nothing) = False Then
    str1 = EXT(array1(i), "did=", "&", 4)
    str2 = EXT(array1(i), "prodName=", "&", 9)
    str3 = str1 & "," & str2
    stream.WriteText str3, 1
    End If
    Next i
    
    stream.SaveToFile "C:\Users\Public\Documents\scraping\this_month\" & output, 2
    stream.Close
    
    Set stream = Nothing
    Set htmldoc = Nothing
End Function

2.KatalonでWEB操作をレコード

chromeにkatalon recorder 拡張機能を追加し、ダウンロードサイトのダウンロード操作を記録。操作は至って簡単。
記録が終わったら、KatalonStudio型式でエクスポート。
(KatalonStudioにも記録機能は付いているのでそちらで行うこともできる)

3.KatalonStudioのインストール&インポート

KatalonStudioを以下からダウンロードしてインストール。
https://www.katalon.com/

①KatalonStudioのプロジェクトを作成
②2で出力した記録したマクロファイルをTestCaseにインポート。
③インポートしたスクリプトを編集
 スクレイピングで作成したCSVファイルからURLパラメータを取得して、ダウンロードのURLに
その値をセットし、「同意する」、「ダウンロード」ボタンを押す という自動処理を実行するようにgroovyを編集

WebUI.openBrowser('https://www.katalon.com/')

def driver = DriverFactory.getWebDriver()

String baseUrl = 'https://www.katalon.com'

selenium = new WebDriverBackedSelenium(driver, baseUrl)

//読み込むCSVファイル名をパラメータに渡し実行
dwnld('xxx.csv')

//関数を定義
def dwnld(a){
f = new File('C:\\Users\\Public\\Documents\\scraping\\this_month\\' + a)

def monthlyList = []
f.splitEachLine(',', { def data ->
        monthlyList.add(data)
    })
monthlyList.each({ def data ->
        if(a == 'toshiba_motordriver.csv'){
        selenium.open('https://xxx.com/xxx/xxx.jsp?did=' + data[0] + '&displang=ja')
        }else{
        selenium.open('https://xxx.com/xxx/xxx.jsp?did=' + data[0] + '&prodName=' + data[1] + '&displang=ja')
        }
        sleep(500)
        //同意ボタンを押す
        selenium.click('name=consent')
    //ダウンロードボタンを押す
        selenium.click('name=downloadBtn')
        sleep(300)
    })
}

ここまででKatalonStudio上でTestCaseを実行するとダウンロードしたいファイルを自動的にダウンロードできるようになる。

4.TestCaseを自動実行

3で作成したTestCaseを自動実行するために、Katalonのコマンドを実行するbatファイルを作成。
コマンドを作成するには、対象となるTestCaseを選択し、Katalon画面の上部中央箇所のボタン「Build CMD」で簡単に作成される。browsertypeはchromeに変更。

katalon -noSplash  -runMode=console -consoleLog -projectPath="C:\Users\xxxxx\Katalon Studio\scraping\scraping.prj" -retry=0 -testSuitePath="Test Suites/xxxxxxxxx" -executionProfile="default" -browserType="Chrome"

編集は以下のサイトからオプションを確認。

編集したコマンドをbatに貼り付け。

5.bat実行

VBAからbatを実行

Dim obj As New IWshRuntimeLibrary.WshShell
Dim ret As Long
ret = obj.Run("C:\Users\Public\Documents\scraping\program\xxxxx\" & bat1, 1, True)

1~5をすべてVBAにまとめて全自動完了。
VBA、Katalonで、色々なスクレイピングに応用できそう。

0
4
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
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?