marketing & director

新米ディレクターがマーケやって奮闘してます。

複数のページのCSVを順々とダウンロードしていくツールを作った話

マーケティングツールを使うと、集計が大変だったりします...。ページを表示するだけで数十秒かかるようなサイトを開いて、ボタン押して・・・これ繰り返すのやだなぁってことで、ツールを作りました。

他にも以前から、主要なページのキャプチャを撮るツールとか、自社のWebアプリ叩いてjsonで指定した情報を更新しまくるツールとか、ポチポチrubySeleniumで組んでたわけです。そんな第三段のツールが、CSVインポート!

SeleniumといえばFirefoxがデフォルトになるので、Chromeにすればいいじゃん!ってことで、Chromeをダウンロードして、Path通して...とやったんですけど、どうもエラーが解消されない...というわけで、Firefoxにprofile書いてCSVをダウンロードするか確認するダイアログを回避する方向にしました。

# encoding: utf-8
require 'watir-webdriver'
require 'open-uri'

class GetCSVs
    # ダウンロードしたいサイトのURL
    URL = "ダウンロードしたいサイトのURL"

  def download()
        profile = Selenium::WebDriver::Firefox::Profile.new
        #ダウンロードファイルの保存先指定 0:デスクトップ 1:ダウンロードフォルダ 2:ダウンロードに指定された最後のフォルダ
        profile['browser.download.folderList'] = 1
        profile['browser.download.useDownloadDir'] = true
        profile['browser.helperApps.neverAsk.saveToDisk'] = "text/plain,application/vnd.ms-excel, text/csv,text/comma-separated-values, application/octet-stream"
        profile['browser.helperApps.neverAsk.openFile'] = "text/csv,application/x-msexcel,application/excel,application/x-excel,application/vnd.ms-excel,image/png,image/jpeg,text/html,text/plain,application/msword,application/xml"
        profile['pdfjs.disabled'] = true
        profile['browser.download.manager.alertOnEXEOpen'] = false
        profile['browser.download.manager.focusWhenStarting'] = false
        profile['browser.download.manager.useWindow'] = false
        profile['browser.download.manager.showAlertOnComplete'] = false
        profile['browser.download.manager.closeWhenDone'] = false

    b = Watir::Browser.new :ff, :profile => profile
    b.goto URL
    # ログイン方法を指定しておく
    # IDとパスワードをテキストフォームに設定
    b.text_field(:name => 'loginId').set 'ログインID'
    b.text_field({:name => 'password', :type => 'password'}).set 'パスワード'
    # ボタンなどをクリック!
    b.a(:id => 'submitButton').click
    # IDをまとめて設定する
    conversion_tag_id = ['56','57','58','60','62']
    # 指定したID毎に繰り返し処理を行う
    conversion_tag_id.each {
        |id| b.goto 'ダウンロードしたいCSVのあるページ' + id
        b.a(:id => 'btnDownloadCSV').click
    }
end
GetCSVs.new.download
end

いえーい、めっちゃ早くなった٩(๑´3`๑)۶

参考ページ

本当はもっと見てましたが...

qiita.com ⇒ echo $PATH して、出てきたフォルダ名に「フォルダへ移動」で移動して、そこにPATHしたいやつ(今回はchrome driver)を置いたほうがラクかなと。