こんにちは、blueです。
スクレイピングで
- ファイルのアップロードを自動化したい
- ファイルのダイアログを表示させないで処理したい
ということはないでしょうか?
この記事では以上のようなファイルのアップロードに関する質問にお答えします。
✓この記事の内容
‣ファイルのアップロード方法
・サンプルコード
ファイルのアップロードについては簡単な方法で実装することができます。
ただHTMLの理解も必要になって来るのでその部分についても説明します。
ファイルを複数処理したいときなど、参考にしつつ挑戦してみてください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。ブラウザやキー操作の基本的なコマンドは共通していますのでコードを書く際の参考になります。スクレイピングレベルを上げたい方にはお勧めの書籍です。
VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍です。ページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。
ファイルのアップロードとは
HTMLのサイトにファイルをアップロードする機能を作るには、inputタグにtype属性を指定して「file」という値を入力します。
引用元:HTMLでファイルアップロード機能を作る方法!プレビュー
<input type=”file”>
ただしこの要素に値を入れるにはファイルダイアログからファイルを選択する必要があります。
しかし、SeleniumBasicではこのダイアログを直接操作できないという問題があります。
ファイルのアップロード方法
ファイルダイアログを表示させずにファイルをアップロードするにはSendKeysメソッドを使用します。
この方法を用いればinput要素に直接ファイルパスをセットできます。
例えば以下のHTML要素に対してファイルをアップロードするコードは以下になります。
<input type="file" id="file_upload">
Driver.FindElementByID("file_upload").SendKeys "アップロードするファイルのフルパス"
この方法を使えばSeleniumBasicでファイルのアップロードが可能になります。
サンプルコード
以下2サイトにおけるファイルのアップロードのサンプルコードです。
前者は画像の圧縮、後者は文書の翻訳の為に使用します。
TinyPNG
“アップロードするファイルのフルパス”には該当する画像ファイルのフルパスを入れてください。
Sub TinyPNG()
Dim Driver As New Selenium.WebDriver
Driver.Start "Chrome"
Driver.Get "https://tinypng.com/"
'画像ファイルをアップロードする
Driver.FindElementByTag("input").SendKeys "アップロードするファイルのフルパス"
'画像ファイルをダウンロードする
Driver.Wait 30000
Driver.FindElementByCss("#top > section.upload > div:nth-child(2) > section > ul > li > div.after > a").Click
End Sub
このサイトにおいてtypeがfileのinput要素は以下のサイト上部にあります。
(わからない場合はデベロッパーツール内でfileで検索してみてください)
この要素に対してSendKeysメソッドを用いてファイルをアップロードさせています。
DeepL
“アップロードするファイルのフルパス”には該当する画像ファイルのフルパスを入れてください。
Sub DeepL()
Dim Driver As New Selenium.WebDriver
Driver.Start "Chrome"
Driver.Get "https://www.deepl.com/ja/translator/files"
'Wordファイルをアップロードする
Driver.FindElementByCss("#file-upload_input").SendKeys "アップロードするファイルのフルパス"
End Sub
このサイトにおけるtypeがfileのinput要素は以下のボタンになります。
先ほどと同様にこの要素に対してSendKeysメソッドでファイルをアップロードさせていします。
今回のまとめ
この記事ではSeleniumBasic内でのファイルのアップロードについて説明しました。
ファイルのアップロード、ダウンロードについては以下の書籍でも紹介されています。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。ブラウザやキー操作の基本的なコマンドは共通していますのでコードを書く際の参考になります。スクレイピングレベルを上げたい方にはお勧めの書籍です。
VBAの書籍の中でSeleniumBasicを取り上げている数少ない書籍です。ページ数としては20ページほどですがとてもわかりやすく書かれています。またVBA全般を網羅した内容が書かれており、長く使用することができます。
コメント