IEオブジェクトに表示中の画像ファイルを、指定のフォルダに保存するには
どのようにすればよいでしょうか?
要するに、マウスの右クリックで表示される「名前を付けて画像を保存」を自動行いたいのです。
アクセスするたびに、画像は変わるため、URLから指定しDLすることは出来ませんでした。
おわかりの方がおられましたらお教えください
できればvbsでお願いします。
追記
IEで表示された画像は、
・ノーキャッシュ (そのためか、右クリック保存とすると、untitleとなる)
sendkeyでも構いません。
何卒よろしくお願いします。
ちなみに以下の方と同じ質問です。(下記スレッドは4ヶ月ルールで投稿不可です。)
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200712/07120003.txt
追記
focusにより、右クリック」して保存という方法でやろうと思いました。
が、
focusができませんでした。
フォーカスをコントロールに移動できません。コントロールは表示されていない、使用できない状態、またはフォーカスを受け入れない種類です。」
何卒よろしくお願いします。
IEオブジェクトとありますので、私が昔やった方法では
できないのですが・・・あくまで参考に・・・
IEならアドイン作成してやれば、実際に可能。
要は受信したHTML等コンテンツファイルから所定の書式
の部位をサーチして、それに関わる動作を別途行う。
一般的には、リンク先文字列を抜き出すとかありますが
画像ファイルの記述を抜き出して・・・と言う方法で、
実現可能です。
あしからず・・・参考まで。
追伸・・・
遠回りになりますが、
フォームに貼ったブラウズコントロールを使っておられるなら
WebBrowser1.Document.Body.InnerHTML
で、コンテンツの内容を取得できますので、画像のタグ部分を
検索・抽出して、その部分を別途ダウンロード・保存するよう
にすれば、自動保存と同じような結果が得られるかと。
ただVB6なので、結構しんどいですが、不可能ではないと。
.NETならクラスに全て機能があるので、そこそこ楽勝に作れる
かと・・・
※ 余談ながら・・・
http://codezine.jp/article/detail/448
HTMLをXMLへ変換する自作クラス
と言うものもあるので、画像タグを抜き出すのに流用可能
ただし、VB6ではない・・・.NET 1.1以上・・・
参考まで。
オショウさん、投稿ありがとうございます。
アドインについてもう少し教えて頂けますでしょうか。
・再度アクセスすると、数字とクッキー値が変わる」
これが、ieオブジェでなくてはいけない理由です。
それがクリアならOKになります。
-------------------------------------------------------
クリップボードへコピー
→ファイルとして保存
現在この方法を探っています。
オショウさん
投稿ありがとうございます。
ダウンロードでは駄目で、
右クリックにて保存でやりたい
のは、・再度アクセスすると、数字とクッキー値が変わる」
からです。
API(Msxml2.XMLHTTP)はダウンロードできるのですが、クッキーの点がクリアできていません。
よろしくお願いいたします。
InnerHTMLで取得したHTMLファイルから切り出して行う方法では
ダメで、あくまでマウスの右クリックで保存としたいと言う事
ですか?
因みに、マウスの右クリックで保存できないのは、ブラウズコン
トロールではできなくて、IE本体の方ではできると言うことな
のか・・・両方とも全くできない。と言うことですか?
有料会員向けサービス等で無料会員はコンテンツの画像を保存でき
ないような仕掛けを施してあるところがあります。
が、そのような仕掛けのあるサイトの画像をも保存したいと言うこ
となら、無理です。
IE用のアドイン作成関係は・・・
http://msdn.microsoft.com/en-us/library/aa753587.aspx
http://msdn.microsoft.com/en-us/library/bb250450.aspx
http://mobiquitous.com/programming/ietoolbar.html
http://www.eva-01.jp/wiki/pukiwiki.php?IE%A5%C4%A1%BC%A5%EB%A5%D0%A1%BC
http://codezine.jp/article/detail/58?p=1
等・・・検索すれば、いろいろありますヨ!
● 再度アクセスすると、数字とクッキー値が変わると言うのは
ダウンロードさせない仕掛け・・・と思うのですが・・・
参考までに。
オショウさん
投稿ありがとうございます。
因みに、マウスの右クリックで保存できないのは、ブラウズコン
トロールではできなくて、IE本体の方ではできると言うことな
のか・・・両方とも全くできない。と言うことですか?
手動で右クリックして保存はできます。
それを自動化しようと思ったときに、sendkeyを考えました。
実際タブキーをおして確かめましたが、タブキーを押してもフォーカスされませんでした。
image = objIE.Document.images(0).focus()
このようにvbsで書いてもエラーは起きませんでした。
しかし、この先がわからない状態です。
お答えになりましたでしょうか。
よろしくお願いします。
追記
現況
あくまで、マウスで右クリックより、画像に名前をつけて保存をプログラムにより行う方法で調査中
mouse_event等のAPI?を使用検討
vbsでAPI使用には「SFC mini」なるものが便利らしい
以上を明日、調べる予定です。
(こんなに大変とは・・・・投稿元のkeiさん、わかってたら教えて下さい)
例えば・・・
私のやった方法を実現しておられる方で・・・
http://www.katch.ne.jp/~h-inoue/tips/cs/0002.html
このように取得したHTMLから"<img src="のタグ文字を
検索・抽出して、ダウロードする・・・
VB6では正規表現機能は無いのと、ダウンロードする機
能は無いので、それらを全て何等かの方法で実現しない
といけない。が、.NETなら、掲載されたソ^スコードで
可能。
自動化と言うところで、手動動作をあくまで模倣した方
法で実現しようとお考えですが、方法論としては間違っ
ていませんが、実現に非常に困難な場合もあろうかと。
ご検討下さい。
以上。
オショウさん
投稿ありがとうございます。
ダウンロードする際に、新しくクッキーを渡してきます。
そこが問題になっています。
いまから改めて取り掛かります。
前提条件・環境はどういう仕様なのでしょうか?
最初から再度読み直しましたけど、よくわからない・・・
VB上にWebコントロールを貼りつけて行うのか、
IEそのものを外部制御で使うのか・・・
その各々で全くアプローチが違うと思うのですが。
しかしながらWebコントロールでもIEブラウザでも
クッキーが来ようが影響は無い・・・
ソフトウェアで直接HTTP通信している方法で実現したい
のでしょうか?
現在、プログラムされている構造が解らないし、参考に
掲載したURLの内容や方法と、どう違うのか理解され
ていない・・・と思います。
闇雲にあれこれとついばんでも解決には至れないと思い
ます。
以上。
オショウさん
投稿ありがとうございます。
IEそのものを外部制御で使う」
これがなかでも適当な方法と考えています。
要するに、マウスの右クリックで表示される「名前を付けて画像を保存」を自動行いたいのです。
↑これが一番的確な質問です。
例えば
このように取得したHTMLから"<img src="のタグ文字を検索・抽出して、ダウロードする・・・」
提案頂いた内容では、クッキーの値が変化してしまいます。
マウスで右クリックの場合は、クッキーは不変です。
・クッキーを変化させない
という条件が、潜在的に質問にあります。
よろしくお願いします。
IEを外部制御で・・・
と言う方法は、難易度が高いと言うか、その方法で画像を
保存できると言う決めてを私は見つけられませんでした。
逆に簡単なのは、HTML通信を独自ソケット通信で行うよう
にして、取得したHTMLから画像部分を検索・抽出するのが
簡単と言うか楽・・・
(先のURLのプログラムの通り:なんせそのもの!)
IEを外部制御で、画像保存やったことのある方、
カキコお願いします!
以上。
無事解決いたしました。
PHPによる解決となりました。
この解決に至ったのは、IEの外部制御が困難に思われたからです。
マウスを任意の場所に移動させ、右クリックをさせる」に行き着きましたが、
それだと、プログラム動作中は、なにもできなくなってしまうのではないか」
そう思ったからです。
元よりPHPを主にして考えていたため、原点に戻ることを思い至りました。
また、PHPなら、httpレスポンスを表示をして、かつ再度リクエストしないでファイルに保存することができるからです。
また、キャプチャをダウンロードする際に、クッキーが更新されることを、これまでの所で発見していました。それがPHPでできなかった原因だろうから、改めてやる価値はあると思いました。PHPからVBに方向転換したことは無駄ではなかった。
長くなりましたが、質問者の作法と思い書きました。
ありがとうございました。
ツイート | ![]() |