VB2010を使用し、IEを操作するコードを考えています。
操作したいサイトはフレームが使われています。
IEを起動させURLを指定しフォームを指定する
まずは。
objIE_A = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
objIE_A.Visible = True '可視、Trueで見えるようにします。
objIE_A.Navigate("https://") 'URLを指定
ボタンをクリックすると。
TextBox1.text = objIE_A.document.frames(2).document.all("hoge").innerTEXT 'データを取得
これでフレーム内のデータが取得できます。
ですが。WebBrowserを使用し、
objIE_A = WebBrowser1
TextBox1.text = objIE_A.document.frames(2).document.all("hoge").innerTEXT 'データを取得
のようにするとエラーがでて動きません。
どのようにすればWebBrowserを使いフレームページのデータを取得できるようになるのでしょうか?
エラーの内容は「公開メンバー 'frames' は型 'HtmlDocument' に見つかりませんでした。」です。
frames を持ってるのは HtmlDocument じゃなくて、HtmlWindow なので、
objIE_A.Document じゃなくて、objIE_A.Document.Window かな。
test = objIE_A.Document.Window ' ★ここ! test2 = test.frames(1).Document TextBox1.Text = test2.all(1).InnerText
後、関係ないと思うけど、プロパティの大文字/小文字も合わせておきたいところ。
frames → Frames
all → All
以下、.NET Framework のリファレンス。
どちらも同じようなことをやってるけど、実は「同じ」ではない。
WebBrowser コントロールは .NET Framework のオブジェクトで、
InternetExplorer.Application は Microsoft Internet Controls のオブジェクトだから、
メンバーが微妙に違う。
# 「同じにしてくれよ!」という気持ちは分かる :-)
http://d.hatena.ne.jp/ken3memo/20110524/1306190154
の
イ.オブジェクトの階層が深いので、途中に変数を入れる?
とか?
objIE_A = WebBrowser1
TextBox1.text = objIE_A.document.frames(2).document.all("hoge").innerTEXT 'データを取得
んっ、もしかして、
Set objIE_A = WebBrowser1
のSet じゃないよね・・・
参照が深いので、
Set objIE_A = WebBrowser1.document.frames(2).document
TextBox1.text = objIE_A.all("hoge").innerTEXT 'データを取得
にするとか?
Setが無いのが気になったのと、分割位置を変えてみては・・・の提案でした。
無事に動作することを願いつつ、失礼します。。。。
回答ありがとうございます。サイトで色々勉強させていただいています。
分割してもうまくいきませんでした。
質問内容を補足しましたのでもしよろしければ解決策を教えて下さい。
コピーは出来ないんですか?
出来たらそのほうが楽かと思います
回答ありがとうございます。
具体的にどのようにすればいいのかご存知でしたら回答お願いします。
objIE_A = WebBrowser1
TextBox1.text = objIE_A.document.frames(2).document.all("hoge").innerTEXT 'データを取得
Set が無い、ということは、objIE_A はクラスのメンバーなのかな?
WebBrowser1 は、Form に WebBrowser コントロールを貼りつけている、ということですよね?
CreateObject を使ったときと同様に、Navigate メソッドを呼んであげる必要があります。
Form をロードしたときの関数などで、データを取り出す前に、
Sub Form1_Load ... WebBrowser1.Navigate("https://...") ... End Sub
としてください。
データを取り出す直前でも、もちろんOKです。
WebBrowser1.Navigate("https://...") TextBox1.text = WebBrowser1.document.frames(2).document.all("hoge").innerTEXT
回答ありがとうございます。
setが無い クラスのメンバー
というのはよくわからないのですが、使用しているのはVisual Basic2010です。
WebBrowser1.Navigate("https://...")を入れてもうまく動きませんでした。
質問の内容を詳細に書き直しましたので、回答いただければ幸いです。
エラーの内容は「公開メンバー 'frames' は型 'HtmlDocument' に見つかりませんでした。」です。
frames を持ってるのは HtmlDocument じゃなくて、HtmlWindow なので、
objIE_A.Document じゃなくて、objIE_A.Document.Window かな。
test = objIE_A.Document.Window ' ★ここ! test2 = test.frames(1).Document TextBox1.Text = test2.all(1).InnerText
後、関係ないと思うけど、プロパティの大文字/小文字も合わせておきたいところ。
frames → Frames
all → All
以下、.NET Framework のリファレンス。
どちらも同じようなことをやってるけど、実は「同じ」ではない。
WebBrowser コントロールは .NET Framework のオブジェクトで、
InternetExplorer.Application は Microsoft Internet Controls のオブジェクトだから、
メンバーが微妙に違う。
# 「同じにしてくれよ!」という気持ちは分かる :-)
うまくいきました!
かなり悩み苦戦してたのでとてもたすかりました。
ありがとうございます。
うまくいきました!
かなり悩み苦戦してたのでとてもたすかりました。
ありがとうございます。