こんにちは!kiyokoです。
前回WEBスクレイピング第一回として下記の記事を書きました。
こんにちはkiyokoです。クラウドワークスやランサーズといった、クラウドソーシングサイトが最近盛り上がっていますね。(いろんな意味で)在宅ワーカーとクライアントがオンライン上でつながることができるなんて、すごーく画期的な仕組みですね。どちらのサイトも(他のクラウドソーシングサイトも)大体ライティングの仕事が多いみたいですけど、私はシステム開発の仕事でクラウドソーシングサイトを利用しています。(副業の範囲でやってます。)それで、案件に多いのが、WEBスクレイピングの仕事!大体クライアントは個人!そして... 【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】 - KiyoCode |
私の記事は、
①プログラミングなんてやったことない人
②どういう動きをしているかなんて詳細はどーでもいいからなるべくコピペで動かしたい人
向けです。特に①に当てはまる人は【エクセルVBA】WEBスクレイピングは簡単だから自力でできるよ【IE操作】もご覧になってくださいね。
最近流行りのクラウドワークス・ランサーズなどのクラウドソーシングサイトで、WEBスクレイピングの仕事依頼が多数あります。
その依頼事項の多くは、情報取得先へページ遷移するためにログイン処理が必要です。
ですので今回は第二回として、ログインは簡単にできるよということを書こうと思います。
スポンサーリンク
エクセルVBAでWEBページにログインするソースだよ
とりあえずソースです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub TestLOGIN() 'objIEという箱を準備 Dim objIE As InternetExplorer 'IEオブジェクトを作成してobjIEにセット Set objIE = CreateObject("Internetexplorer.Application") 'IEを表示 objIE.Visible = True 'URLを開く objIE.navigate "http://localhost/blog/Login.html" '←URLは開きたいURLに書き換えて! Call wait(objIE) 'HTMLドキュメントの箱を準備 Dim htmlDoc As HTMLDocument 'objIEで開いているページのHTMLドキュメントを、htmlDocにセット Set htmlDoc = objIE.document htmlDoc.getElementById("userID").Value = "KiyoCode" '""の中はUserIDを書き換えて! htmlDoc.getElementById("passWD").Value = "KiyoCodePass" '""の中はpassWDを書き換えて! 'フォームの内容を送信 htmlDoc.getElementById("formLogin").submit Call wait(objIE) End Sub '**************************************** '**********IE表示待機メソッド************ '**************************************** Public Function wait(objIE As InternetExplorer) Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop End Function |
なんとなくコメントを見ただけでわかった人は、
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」をクリックします。
それをメモ帳でもサクラエディタでもなんでもいいのでテキストエディタに貼り付けしてみると、
1 2 3 |
<input type="text" id="userID" name="user_id" value="" size="24"> <input type="password" id="passWD" name="password" value="" size="24"> <input type="submit" id="submitLogin" name="submit_Login" value="login"> |
こんな感じになります。
一行目は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操作】