KiyoCode

【エクセルVBA】WEBスクレイピングでログインは簡単にできるよ【IE操作】

calendar

reload

【エクセルVBA】WEBスクレイピングでログインは簡単にできるよ【IE操作】

こんにちは!kiyokoです。

前回WEBスクレイピング第一回として下記の記事を書きました。

私の記事は、

①プログラミングなんてやったことない人
②どういう動きをしているかなんて詳細はどーでもいいからなるべくコピペで動かしたい人

向けです。特に①に当てはまる人は【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】もご覧になってくださいね。

最近流行りのクラウドワークス・ランサーズなどのクラウドソーシングサイトで、WEBスクレイピングの仕事依頼が多数あります。
その依頼事項の多くは、情報取得先へページ遷移するためにログイン処理が必要です。

ですので今回は第二回として、ログインは簡単にできるよということを書こうと思います。

スポンサーリンク

エクセルVBAでWEBページにログインするソースだよ

とりあえずソースです。

なんとなくコメントを見ただけでわかった人は、
10行目のURLと、19行目のUserID、20行目のPassword、22行目のSubmitボタン この4行を書き換えるだけでいけるなー♪とわかったと思います。

スポンサーリンク

エクセルVBAでWEBページにログインする方法

ログインページって大体どんな感じか決まってますよね。
ログインIDとパスワード入れて、ログインボタン押す。その程度しかないシンプルな画面が多いです。

ログインするためには、ログインID入力欄のタグ(タグの意味がわからなくてもふーん。ぐらい思って流してください。)とパスワード入力欄のタグ、そしてログインボタンがどんな感じか!それがわかるだけでログインできちゃいます。

開発者ツールを起動する

WEBページのタグやログインボタンがどんな感じか確認するために、開発者ツールを使用します。
(インストール不要だし、もちろん無料です。)

IEの場合

IEで、スクレイピングしたいページ(今回の場合ログイン画面)を開き、「F12」ボタンを押します。

開発者ツールが開かれるので、赤丸で囲っている矢印のようなマークを押します。
その状態で、UserIDの入力欄をクリックすると、そこに該当するHTMLドキュメントが青くなります。(赤四角で囲っている部分)

Chromeの場合

Chromeで、スクレイピングしたいページ(今回の場合ログイン画面)を開き、「Ctrl」+「Shift」+「i」を押します。

右半分に開発者ツールが開かれるので、赤丸で囲っている矢印のようなマークを押します。
その状態で、UserIDの入力欄をクリックすると、そこに該当するHTMLドキュメントがグレイになります。(赤四角で囲っている部分)

タグの要素を確認してみる

このページの場合、ログインするときに必要なことは、UserID、Passwordを入力し、Loginボタンを押すことですよね。
ですので、UserID、Password、Loginボタンのタグの要素を確認する必要があります。

上で説明したようにIEでもChromeでもどちらでもよいので開発者ツールを開き、必要なタグの要素を確認します。
該当するHTMLドキュメントがわかったら、そこを右クリックし、「Copy」→「Copy outerHtml」をクリックします。

それをメモ帳でもサクラエディタでもなんでもいいのでテキストエディタに貼り付けしてみると、

こんな感じになります。
一行目はUserIDの部分。二行目はPasswordの部分。三行目はLoginボタンの部分ですねー。

入力欄に値を設定する

ログイン画面の入力欄はUserIDとPasswordですね。
先ほど確認したタグの要素に、idが設定されている場合(id=”○○”という部分がある場合)は、勝ったも同然です。idはドキュメントに一つしかないので、バシッと特定できます。
htmlDoc.getElementById(“○○”).Value = “XX”
の○○の部分にidの値を入れます。XXは入力欄に入れる値ですねー。

idが設定されていないがnameが設定されている場合(name=”○○”という部分がある場合)はこうです。
htmlDoc.getElementsByName(“○○”)(0).Value = “XX”
(0)としているのは、nameが同じものがドキュメント内に存在する場合があるので、その何番目のnameなんですよーということを指定してあげないといけないからです。
ログイン画面なんて大抵フォームは一つしかない画面ばっかりなので、0で大体の画面は大丈夫だと思います。

idもnameも設定されていない場合はタグがあります。
タグというのは<>で囲まれている一番最初に書かれてる部分です。もうそれでいいです!

この場合inputですね。

htmlDoc.getElementsByTagName(“input”)(0).Value = “XX”
今回はinputタグがドキュメント内に3つあるので、この場合、(0)がUserIDで、(1)がPasswordになりますねー。

はい。この三パターンのどれかでいけるはずなので、
最初に載せたソースの19行目のUserID、20行目のPasswordを書き換えてみてくださいね♪

ログインボタンを押す

ログインボタンも同じように、idが設定されている場合は勝ったも同然です。
htmlDoc.getElementById(“○○”).Click
の○○の部分にidの値を入れます。

idが設定されていないがnameが設定されている場合はこうです。
htmlDoc.getElementsByName(“○○”)(0).Click
(0)の意味とかは入力欄のそれと同じですね。○○の中にnameを入れます。

idもnameも設定されていない場合はタグがあります。
今回の例の場合inputタグになりますが、入力欄で、要素について(0)がUserIDで、(1)がPasswordになると説明しましたね。
ですので、
htmlDoc.getElementsByTagName(“input”)(2).Click
になります。

ちなみに、

こんな感じで、入力欄全部が青くなるようにカーソルを合わせて、「Copy outerHtml」を見てみると、
入力欄が、form ~~ で始まるタグ内に書かれていることがわかります。

なので、これでもいけます。
htmlDoc.forms(0).submit
0番目のformをsubmitしてしまえ。というやつです。

私もよくわかりませんが、こんなのでも動きます。(疲れてきた。。。)
htmlDoc.all.submit.Click

はい。5パターン紹介しました。大抵どれかでいけるはずなので、
最初に載せたソースの22行目のSubmitボタンを書き換えてみてくださいね♪

ログインできた?

最初に載せたソースの10行目のURLと、19行目のUserID、20行目のPassword、22行目のSubmitボタンをログインしたいページのそれに書き換えましたか?

それでは実行してみてください。

ログインできましたか♪

まとめ

今回はエクセルVBAでのWEBスクレイピング 第二回目としてログインの方法をお話ししました。

ちょー簡単でしたね。

マクロを動かしたことがない人でも、コピー&ペーストで、ログインするマクロが組めちゃったと思います。

簡単なんでクラウドソーシングサイトに安ーい値段で依頼するぐらいだったら自分でやってみてくださいね♪
(もしくはそれなりの値段で私に依頼してくださーい♪)

こちらもどうぞ

【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】
【エクセルVBA】WEBスクレイピングでログインは簡単にできるよ【IE操作】
【エクセルVBA】WEBスクレイピングで検索は簡単にできるよ【IE操作】

この記事をシェアする

コメント

  • スクレイピングの連載、スクリプト行に親切なコメントが入っていてとても分かりやすいです。雑誌の連載では説明が無さすぎて意味が全然わかりませんでした(だから自分の環境に合うように編集できない)。
    4月で連載が止まっていて残念ですが、再開の元気の素になればとサイゼで一回ご飯が食べれる程度のカンパをしたいと思っています。アマゾンをよくご利用になるのであればアマギフにしたいのですが。

    by ごまだんご 2017年12月26日 11:59 AM

    • ごまだんごさん

      コメントありがとうございます!返信が遅くなってしまい申し訳ありません。

      わかりやすいと言っていただいてとてもうれしいです。
      記事を作成するのに労力がいるわりに、需要があるように感じずやる気を失っていたのですが、見てくださる方がいるということで、また再開しようと思います。
      (1月はちょっと忙しいので、2月以降になってしまうかとは思います。。。申し訳ありません。。。)

      コメントだけでもとっても嬉しかったのですが、カンパも、もしお気持ちが変わらないようであればメールのほうに宜しくお願い致します。(kiyoko@kiyocode.com)
      励みになります!

      「こういう記事を作成してほしい!」などの要望があれば、またコメントを頂けると嬉しいです。
      スローテンポにはなりますが更新は続けていこうと思っているので、たまに思い出したときにでも、また立ち寄って頂けたらと思います。

      by kiyoko 2017年12月28日 4:14 PM

  • スクレイピングにとっても役に立ちました。
    続編を期待します。

    IEのF12キーを知って感動しました。
    今まで、ソースの表示をして目で探していましたから。
    エレメントの後ろの(0)とかの意味を始めて知りました。

    他のサイトで得た知識を統合化できてよかったです。
    とてもわかりやすい説明でした。

    by さいら 2018年4月9日 5:28 PM

    • さいらさん

      コメントありがとうございます!
      とっても役に立ちましたとのこと、こちらこそ、とっっっても嬉しいです!ありがとうございます。

      スクレイピング記事について、続編を期待していただきとてもありがたいです。
      ちょっと最近こどもを産んだりして忙しかったのですが、そろそろまた再開しようと思います!

      おまたせしてしまうかもしれませんが、また、気が向いたときに立ち寄ってくださいね。

      by kiyoko 2018年4月9日 10:42 PM

  • kiyokoさま

    すごい!感動感動です。
    VBAを始めたのは仕事を効率化するのが目的で、
    ほんの2か月ほどの初心者です。
    それでもってスクレイピングもできればいいなと思い、いろいろな本を
    買っては読んでみたのですが、やはり中級者?向けに書かれているもの
    ばかりで、手も足も出ない状況でした。

    それでネット検索でkiyokoさんのHPにたどり着いたのですが、
    見よう見まねでやってみたところ、すごいです!
    自分みたいなのでもできました!
    (私は官公庁関係のサイトでした。)

    そこで次への応援もかねてカンパをさせていただきたいのですが、上の方への
    返信であったアドレスへメールさせていただいたらOKですか?

    by ハギハラ 2018年4月22日 1:29 AM

    • ハギハラさん

      コメントありがとうございます!
      お仕事の効率化のために、少しでもお役に立てましたでしょうか?

      初心者の方でもほんの少し書き換えるだけで簡単にスクレイピングができるようにと考えて記事を作成したので、ハギハラさんの、できました!とのコメントとっても嬉しいです。ありがとうございます。

      コメント頂いただけでも充分とてもとても嬉しいのですが、カンパ頂けるのであればありがたいです!励みになります!
      kiyoko@kiyocode.comによろしくお願いします。

      近日中に新しい記事を書こうと思ってますので、また思い出した時にでも立ち寄ってくださいね。

      by kiyoko 2018年4月22日 9:40 AM

  • kiyokoさま

    お世話になっております。
    メールさせていただきましたので、よろしくお願いいたします。

    by ハギハラ 2018年4月23日 10:05 PM

  • https://kiyocode.com/pg/vba-scraping2

    Kiyoko様、初めまして。

    ログインするサイトをExcelでスクレイピングする方法について探していた時にこのページを見つけました。

    私は皆様のようにはうまくいかずエラーが出てしまったので、質問をさせて頂きたいと思い、失礼ながら書かせていただきました。

    以下のように、ログインするページにはID指定がなくNameがありましたので、その部分を変更しています。

    Sub ToyotaSupplierLoginScraping()

    Dim objIE As InternetExplorer

    Set objIE = CreateObject(“InternetExplorer.Application”)

    objIE.Visible = True

    objIE.Navigate “https://localhost.com”

    Call wait(objIE)

    Dim htmlDoc As HTMLDocument

    Set htmlDoc = objIE.document

    htmlDoc.getElementsByName(“User”)(0).Value = “UserID”

    htmlDoc.getElementByName(“PASSWORD”)(0).Value = “PassWord”

    htmlDoc.getElementByName(“submitButtonName”)(0).Click

    Call wait(objIE)

    End Sub

    これを実行すると、「Dim objIE As InternetExplorer」の部分で止まり、

    「Compile error: User-defined type not defined」とエラーが表示されてしまいます。

    どうやらUserを指定する部分が指定されていない、と言っているようなのですが。。。

    大変申し訳ないのですが、もし可能でしたら変更点を教えて頂けると大変助かります(mOm)

    by カニタニ 2018年10月31日 8:15 AM

    • カニタニ様

      返信が大変遅くなって申し訳ありません。(子供が入院していてバタバタしていました。)

      ご質問頂いた件についてですが、
      「Microsoft Internet Controls」を参照設定すれば動くと思います。

      参照設定の方法は、【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】の「WEBスクレイピングのためのライブラリを追加する」を参考にしてくださいね。

      by kiyoko 2018年11月14日 11:38 AM

  • はじめまして。VBAでの開発はよくするんですがスクレイピングがVBAで出来ることを
    こちらで初めて知り、参考にさせていただきました!というか、こちらで全て学んでおります!!
    とってもわかりやすい解説でありがたいです。
    ちなみに私も2歳児をもつワーママです(^^)
    今後も訪れさせていただきます!!本当にありがとうございます!!

    by しおり 2019年6月14日 10:44 AM

    • しおり様

      はじめまして。返信が大変遅くなり申し訳ありません。
      とってもわかりやすい解説とのこと、うれしいお言葉ありがとうございます!
      今後ともよろしくお願いします。

      by kiyoko 2020年1月28日 11:28 AM

down コメントを残す




著者

kiyoko

kiyoko

UC歴16年のワーママkiyokoです。
3歳の男の子、0歳の女の子持ち。
システム開発会社を退職し、現在は在宅で稼ぐ道を模索中。
プロフィールの詳細とお問い合わせはこちらから→ [詳細]