エクセルVBAを使用してIEを操作する方法(但しHTMLは表示しない)について教えて下さい。

VBAとHTMLの中級程度、それからMySQL初級程度の知識があります。
IEで描画する時間が無駄なのでHTMLデータを直接取得しつつ処理を施していきたいです。

やりたいことは、エクセル上に並んだデータを、
サイトにログイン等をしつつフォームに任意のアルゴリズムで入力していくことです。
(例えばYahoo!オークションの自動出品ツール等を作りたい場合など。)

●具体的なアルゴリズムは都度取得したHTMLでタグやフォームを解析して作っていきたいと思っています。
●途中でセッションが切れるなど、遷移先のページが一通りにならない場合も、該当ページのHTMLの特徴を解析して条件分岐で対応しようと思います。

以下のページに載っている方法を使えばおおよそ自分でプログラムは組めそうなのですが、
HTMLを描画せず進めていくのにどういった環境を用意してどういったコンセプトでプログラムしていいか分かりません。

[三流君VBAでIE操作 InternetExplorer.Applicationを操作する]
http://www.ken3.org/cgi-bin/group/vba_ie.asp

続きはコメント欄に示します。

お力を貸して下さい。よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/09/26 19:02:23
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:jacopetti No.2

回答回数7ベストアンサー獲得回数1

ポイント50pt

Webサイトの内容を引き抜いてきたり、自動処理するものを、一般に「スクレイピング」と読んでいますので、「スクレイピング」で調べてみると色々発見があるかと思います。

当方VBAは全くもってドシロウトなので、VBAを使っての解決策については適切なポインタ示せませんが、Rubyではその辺のライブラリが非常に充実しており、実装も楽です。http://route477.net/rubyscraping/ などを参照されるとよいかと思います。

HTMLをダウンロードしてくるのは標準で同梱。HTMLを解析するライブラリとしてはHpricot、Nokogiriなど。その辺をある程度勝手にやってくれるMechanizeというライブラリもありますが、私は使ったことがありません。

なお、「セッションが切れて云々」については、大抵のWebサイトは、ログイン画面を叩いてあげたときに、サーバ側からもらったSet-Cookieの内容を、次のリクエストからCookieヘッダに入れてやれば大体OKなんじゃないのかなぁと思ったりします。

id:ReoReo7

ありがとうございます!

確かに、Cookieヘッダの内容をヘッダに入れてやればいろいろな動作をしてくれそうですね!

PostDataを調整しながら開発したいと思います!

2010/09/26 19:02:00

その他の回答1件)

id:spyglass No.1

回答回数455ベストアンサー獲得回数29

ポイント20pt

マウスコントロールソフトのUWSCを使います。


「UWSC」

http://www.uwsc.info/


「はてな検索:UWSC」

http://search.hatena.ne.jp/questsearch?ie=utf8&word=UWSC

id:ReoReo7

説明が悪かったようで。

マウスコントロールするよりも早い、直接フォームにVBAで入力するアルゴリズムは分かるんです。描画していると遅くなるので更に早くする方法を模索しています。

追記:javascript使用のページの情報だと、確かに「UWSC」は有効かもしれませんね!

2010/09/22 23:10:19
id:jacopetti No.2

回答回数7ベストアンサー獲得回数1ここでベストアンサー

ポイント50pt

Webサイトの内容を引き抜いてきたり、自動処理するものを、一般に「スクレイピング」と読んでいますので、「スクレイピング」で調べてみると色々発見があるかと思います。

当方VBAは全くもってドシロウトなので、VBAを使っての解決策については適切なポインタ示せませんが、Rubyではその辺のライブラリが非常に充実しており、実装も楽です。http://route477.net/rubyscraping/ などを参照されるとよいかと思います。

HTMLをダウンロードしてくるのは標準で同梱。HTMLを解析するライブラリとしてはHpricot、Nokogiriなど。その辺をある程度勝手にやってくれるMechanizeというライブラリもありますが、私は使ったことがありません。

なお、「セッションが切れて云々」については、大抵のWebサイトは、ログイン画面を叩いてあげたときに、サーバ側からもらったSet-Cookieの内容を、次のリクエストからCookieヘッダに入れてやれば大体OKなんじゃないのかなぁと思ったりします。

id:ReoReo7

ありがとうございます!

確かに、Cookieヘッダの内容をヘッダに入れてやればいろいろな動作をしてくれそうですね!

PostDataを調整しながら開発したいと思います!

2010/09/26 19:02:00
  • id:ReoReo7
    続きはコメント欄に書くと書きましたが、質問は以上です。よろしくお願いします。
  • id:ku__ra__ge
    これが質問の趣旨にあった回答なのか定かでないのでコメントにて失礼します。

    ”HTMLを描画せず進める”の意味がちょっとよく判らないのですが、それはobjIE.Visible = Falseすればいいってもんではないんですよね?
    InternetExplorer.Applicationは外部から InternetExplorer を操作するためのものなので、HTMLのレンダリングをしないというのは無理だと思います。web-apiが用意してあるサイトであれば、XMLHttpRequestオブジェクトを使う事でIEを操作するよりも軽い通信が行えると思いますよ。
  • id:ken3memo
    ku__ra__ge さん や http://q.hatena.ne.jp/1250623193#a942081
    で紹介されている
    http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html
    みたいな感じで、
    XMLHttpRequestオブジェクトを使用。

    その隣のページ http://www.f3.dion.ne.jp/~element/msaccess/AcTipsMSHTML.html
    を参考にした、
    .createDocumentFromUrl を 使って、表示させない
    私の手前味噌のページですが http://d.hatena.ne.jp/ken3memo/20090904/1252025888 でテストしてみた

    で、ページの情報が取得できたら、登録(POST)したいので

    POST送信
    http://support.microsoft.com/default.aspx?scid=kb;ja;418460
    http://d.hatena.ne.jp/language_and_engineering/20100914/p1
    を参考にして、データを送るとかかなぁ。
    ※POST マルチパートのオークションの画像送信は、少し探したけど見つかせなかったので、コメントで失礼します。
    何かの参考/解決の糸口となれば幸いです。
  • id:ReoReo7
    >ku_ra_geさん

    ありがとうございます。「XMLHttpRequestオブジェクトの利用」、これが自分の望んでいた方法のようです!
  • id:ReoReo7
    >ken3memoさん

    本人から直接アドバイス頂けまして光栄です。
    ken3memoさんのホームページは
    「プログラムが必要となった経緯や、プログラム完成までの試行錯誤の道のり、プログラムで何ができて問題点があるとすれば何か」といった点を全部押さえていてとても分かりやすいので、分からないことがあった場合いろいろ検索すると最終的に辿り着いてお世話になることが多いです。

    [三流君VBAでIE操作 InternetExplorer.Applicationを操作する]
    http://www.ken3.org/cgi-bin/group/vba_ie.asp

    から「XMLHttpRequestオブジェクトの利用」みたいな観点でスピードを改善した記事が「三流君」内にあれば最高なんだけどなぁ・・・と思っていたところでした。

    しかも今から10日前に書いていたとは!ありがとうございます、大いに参考にしたいと思います。

    ※ちなみに、IEを操作するVBA自体が初めてなのですが、いきなりMSHTMLを利用するよりも、最初はIEでちゃんと視覚化しながら作ってみたほうが分かりやすいですよね?

    あと、記事内に
    >私は、ネット上のHTML文章処理、いつもIEを表示して使っていますが
    と書いてありますが、この理由って何でしょう?
    例えばken3memoさんがヤフオクの自動出品ツールを作るとしたら、どうやります?
  • id:ken3memo
    ヤフオクやオークション関係は触っていないので、想像・妄想で回答します。
    隠し項目でフォームに埋め込まれたパラメータ

    クッキー、
    の処理が面倒なので、いつものように、IEを表示させたまま処理かなぁ。POST時にパラメータを組み立てるのが面倒なので、フォームにデータセット、SUBMITするかなぁ。
    でも、オークションだと画像の登録があって、INPUT TYPE=FILE の 入力をクリアーしないといけないし、
    自分が使うツールなら、操作が見えてもいいけど、売り物や配布するツールなら、変に画面が表示されないほうが やはりいいと思います。
    あとは、登録用のAPIが用意されていないか、探ったりするのかなぁ。
    読み返すと回答になっていませんが、何も書かないよりはイイと思いコメントを登録します。
    人力検索や他のQAサイト、Blog,BBSなどで、よい情報に巡り合えることを願いつつ、失礼します。
  • id:ReoReo7
    >ken3memo

    遅くなりましたが、大変貴重なご意見ありがとうございます。
    現在は
    >隠し項目でフォームに埋め込まれたパラメータ や クッキー、 の処理が面倒なので
    の意味を実感しつつ、まずはIE操作にて所望の処理の実行や情報の取得を実現しているところです。

    ken3memoさんのサイトには大変お世話になっています。ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません