複数のページのCSVを順々とダウンロードしていくツールを作った話
マーケティングツールを使うと、集計が大変だったりします...。ページを表示するだけで数十秒かかるようなサイトを開いて、ボタン押して・・・これ繰り返すのやだなぁってことで、ツールを作りました。
他にも以前から、主要なページのキャプチャを撮るツールとか、自社のWebアプリ叩いてjsonで指定した情報を更新しまくるツールとか、ポチポチrubyとSeleniumで組んでたわけです。そんな第三段のツールが、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)を置いたほうがラクかなと。