embotが可愛すぎる件について
【VBA】T●UTAYAさんでの商品検索
こんにちは
今回はVBAで商品を検索するプログラムを作成してみましょう。
検索するサイトはT●UTAYAさん
有名ですよね。
最近はAmazonPrimeに浮気しておりますが、CDを借りるときは利用させていただいています。
サンプルプログラム
Sub 検索() Dim ie As InternetExplorer Dim textInput As HTMLInputElement Dim form As HTMLFormElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://store-tsutaya.tsite.jp/index.html/" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Set textInput = ie.document.getElementById("searchText") textInput.Value = "君の名は" Set form = ie.document.forms("kSearch") form.submit End Sub |
1行目:プロシージャの開始
2~3行目:変数の宣言
4行目:変数formをHTMLFormElement型で宣言します
5行目:なし
6~11行目:省略します。URLが変更されてるので注意
12行目:なし
13行目:IDに"searchText"が入ったドキュメントを格納します
14行目:格納されたドキュメントの値を"君の名は"に設定します
15行目:なし
16行目:IDに"kSearch"が使われたフォームを格納します。
17行目:フォームを送信します
18行目:プロシージャの終了
解説
今回はHTMLFormElement型を使用しています。
これはフォームをオブジェクトに格納するために使用しています。
下のはソースコードです。
<form id="kSearch" ~となっているため
Set form = ie.document.forms("kSearch")
でフォームを格納しております。
フォームの格納はgetElement~としては使わないんですね
そして、foem.submitでフォームの送信です。
ちなみに私は君の名は。がすきで4回ほど観ましたね。
入れ替わり自体はよくある話でしたが、その後の展開が予想外でしたw
(検索結果にAVが紛れ込んでいるのも予想外でした。)
IEのテキストボックスを編集する
こんにちは
9月中旬に入り涼しくなってきましたね。
昨夜は寒いぐらいですw
さて、今回はIEのテキストボックスの内容です。
テキストボックスといえば、GoogleやYahoo!の検索を行う際に入力するところですね。
ここを自在に入力できれば、大量のデータを検索でき、検索結果を取得できると思います。
今回はそのテキストボックスの入力と値の取得についてやってみましょう。
サンプルプログラム
Sub useTextbox() Dim ie As InternetExplorer Dim textInput As HTMLInputElement Dim textOutput As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-2.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Set textInput = ie.document.getElementById("Text1") MsgBox textInput.Value Set textOutput = ie.document.getElementById("Text2") textOutput.Value = "VBAからの書き込み" End Sub |
1行目:プロシージャの開始
2行目:変数の宣言
3,4行目:HTMLInputElement型として変数を宣言
5行目:なし
6行目:変数ieにInternetExplorer.Applicationをセット
7行目:IEを表示
8行目:ページに接続
9~11行目:ページを開くまで待機
12行目:なし
13行目:DOMを使ってId"Test1"のドキュメントを取得
14行目:取得したドキュメントからValueの項目をMsgBoxで表示
15行目:なし
16行目:"Text2"のドキュメントを取得
17行目:"Test2"のValueの項目を変更
18行目:終了
解説
HTML文章はpタグやtableタグなどあらゆる構成文章から成り立っており、この中から捜査対象のテキストボックスを特定するためには、Inputタグがもつ属性に注目してみましょう。
プログラム内のサイトにアクセスしてソースを表示すると次の箇所が存在します。
取得用:<input id="Text1" type="text" value="テスト">
出力用:<input id="Text2" type="text" value="">
今回のプログラムはこの情報をプログラムで編集するといった内容です。
HTMLInputElementとは
テキストボックスへの参照を格納するための変数とのことです。
<input ~>がこのオブジェクトに格納されます。
getElementByIdとは
HTMLInputElementのオブジェクトに指定されたIDを使用しているドキュメントを格納するといったところでしょうか。
今回は格納した"Text1"の値の表示と"Text2"の値の書き換えを行っていることが分かります。
DOMってなに?
こんにちは~
IE関連のページを探ると毎回表示されるDOMという単語
DOM?ジェットストリームアタックのことですかね?
DOMとは
DOMとは(Document Object Model)の略称で構造化された文章の各要素をオブジェクトとしてプログラムから扱えるようにしたものだそうです。
HTMLのソースをオブジェクト形式にしたってところですかね?
DOMがあるおかげでプログラムからHTMLを操作できるらしいです。
HTMLはウェブページを構成するためのプログラムのようなものです。そしてIEなどのブラウザがそれを分かりやすい形に変換しています。今見ているこのページもHTMLブラウザが変換して表示しているものですね。
サンプルプログラム
Sub GetByDOM() Dim ie As InternetExplorer Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-1.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Dim htdoc As HTMLDocument Set htdoc = ie.document MsgBox htdoc.getElementsByTagName("LI")(1).innerText End Sub |
1行目:プロシージャの開始
2行目:変数ieをInternet\explorer型で宣言
3行目:なし
4行目:ieにInternetExplorer.Applicationをセット
5行目:IEを表示
6行目:このページを開く
7~9行目:ページが開き終わるまで待機
10行目:なし
11行目:変数htdocをieページのDOMをセット
12行目:箇条書きの2番目の項目をMsgBoxで表示
13行目:プロシージャの終了
こんな感じですね
ちなみに("LI")の後の括弧の中を0にすると1行目、2にすると3行目が表示され、当然ながら3にするとエラーが表示されます。
DOMは名前のとおりドキュメント形式で取得できるようですね。
IEのページがセットされたドキュメント=DOM かな
取得ができたのなら入力もできるはずです!
【VBA】IE画面の表示/非表示
こんにちは
少しメモ程度の情報ですが、後々見返したときに役に立つと思いますのでまとめます。
今回学習するのはIE画面にあるアドレスバー等の表示/非表示の切り替えです。
表示/非表示するにあたって作業が必要になるため、その手順をまとめていけたらなと思います。
最初の手順
メニューバーの表示/非表示を行いたいため、メニューバーをあらかじめ表示する必要があるそうです。アドレスバーやステータスバーはそのままで大丈夫です。
1.IEを起動
2.タブの隣(何も無いところを右クリック)
3.メニューバーをクリック
これでOKです。すでにチェックが入っている場合は無視してください。
サンプルプログラム
Sub ShowBars() Dim ie As InternetExplorer |
今回切り替えるのは以下の4つです
- AddressBar(アドレスバー)
- Toolbar(ツールバー)
- MenuBar(メニューバー)
- StatusBar(ステータスバー)
IEオブジェクト.各プロパティ = True/Falseで表示/非表示を切り替えます。
ちなみにToolbarがFalseの場合、AddressBarやMenuBarがTrueであっても非表示のままなので注意が必要です。
また、ツールバーを一度非表示にするとタブが非表示のままになってしまいます。
IE11と相性が悪いのですかね?
今回は簡単にまとめさせていただきました。
本当にメモ程度ですねw
【VBA】IEのポップアップの出現検知
こんにちは
IEのポップアップが発生するかを検知するプログラムを作成していたのですが、どうも動作しない、エラーが発生するという状態でした。
調べてみるとIE9以降はGetLastActivePopup関数でポップアップが出現しているか検知することはできない模様。使用している参考書が古いこともあってここで1時間ほど悩んでいました。
GetLastActivePopupとは
GetLastActivePopup(オブジェクト名.hWnd)として使ういポップアップが表示されると戻り値が変わるそうです。今のバージョンとは異なるためあまり調べる気にならないですね。
ちなみに.hWndプロパティってなんだろ?
Hwndプロパティは、Excel ウィンドウの最上位レベルのウィンドウ ハンドルを示す長整数型 (Long) の値を返します。値の取得のみ可能です
こちらのサイト様によると最上位レベルのウィンドウとありますね。
たしか、IE9以降は最上位レベルのウィンドウがIEではなくなったとか・・・色々調べましたが、検知できそうなものは発見できず
これにはお手上げですね。
【VBA】Webページのタイトルを指定してIEを取得する2
こんにちは
今回は先日のIE取得のプログラムにOn Errorを足すことで判定対象となるプロパティをオブジェクトが保有しているかどうかに関わらず利用できます。
どういうことかというと
[オブジェクト名].Visible = Trueで表示したばかりのIEにはタイトルがない状態です。そこで前回使用したプログラムを実行するとエラーが発生してしまいます。今回はそれを防いだプログラムとなります。
サンプルプログラム
Sub test() Dim colSh As Object |
1~8行目:前回と同様
9行目:変数strTemp の初期化(空白に戻すだけ)
10行目:なし
11行目:On Error Resume Next
説明してないところですが、エラーが発生しても無視して次に行きなさいという命令です。
12行目:前回同様strTemp にタイトルを代入しています
13行目:11行目で発生したエラー無視の終わりを示しています。
13行目以降えらーが発生した場合はエラーとして表示されます。
14行目:タイトルにAmazonが含まれているかの判定
15行目~前回同様
こんな感じですね。
まあタイトルがない場合なんて発生しにくいとは思いますが、こっちのほうが安定して動作すると思います。