C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

フレーム分割されたページのインプットボックスとボタン


(過去ログ 4 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■4183 / inTopicNo.1)  フレーム分割されたページのインプットボックスとボタン
  
□投稿者/ やま 二等兵(1回)-(2006/06/06(Tue) 19:51:46)

分類:[C#] 


分類:[C#] 

初めまして。
フレーム分割されたページのインプットボックスに値を入れて、OKボタンを押す処理をC#.NETで作りたいのですが、資料が無くて困っています。

具体的には、以下のページにアクセスして、株価の取得が目的です。
http://qweb15-2.qhit.net/livedoor2/e70b7b7581f3dfc884aeee5fe51012ef683fdbba/isweb/docs/index.html
左のフレームに株価コードex.1308を入力して、GOのボタンを押したいです。

以下のページを参考に、ソースを書いたのですが、何処が間違っているのか、分からないです。
http://momotchi.net/forums/215/ShowPost.aspx

作成ソース
this.axWebBrowser.Navigate2(ref url, ref flags, ref targetFrame, ref postData, ref header);

HTMLDocument doc;

doc = (HTMLDocument)axWebBrowser.Document;
FramesCollectionClass frames = (FramesCollectionClass)doc.frames;
HTMLWindow2 frame = (HTMLWindow2)frames.item(ref o);
IHTMLDocument2 Document = frame.document;
IHTMLElementCollection forms = Document.forms;
IHTMLFormElement form = (IHTMLFormElement)forms.item("ent_form",0);
((HTMLInputTextElement)Document.all.item("KEY1",0)).value = "1308";
HTMLInputElementClass inputclass = (HTMLInputElementClass)form.item("GO", 0);
inputclass.click();

なにせ、初心者ですので、数日進歩が無いです。
デバッグ方法、資料の探し方や、間違っているところをご指導頂けないでしょうか?
よろしくお願いします。

0
引用返信 編集キー/
■4185 / inTopicNo.2)  Re[1]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ Hongliang 伍長(47回)-(2006/06/06(Tue) 20:53:43)
Hongliang さんの Web サイト

分類:[C#] 

巧く行かないと一口に言っても色々あります。
コンパイル中にエラーが出る、実行時に例外が投げられる、いきなり終了する、エラーは起きないが実行もされない、などなど。
どういう状況なのか、エラーが出るならそのエラーのメッセージやソースコードのエラー該当位置、と言った情報がなければ答えるのも難しいです。

0
引用返信 編集キー/
■4188 / inTopicNo.3)  Re[2]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ やま 二等兵(3回)-(2006/06/06(Tue) 22:28:50)

分類:[C#] 

コメントありがとうございました。
状況書き忘れました。すみません。
コンパイルはエラー無し。
実行時もエラーは無いです。
しかし、ページのテキストボックスに入力しているはずがされて無く、GOのボタンも押しているつもりなのですが、反応有りません。
デバッグの方法が分からなくて、困ってます。
環境は、VS.NET2003でC#です。
お手数お掛けしますが、よろしくお願いします。


0
引用返信 編集キー/
■4193 / inTopicNo.4)  Re[3]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ Hongliang 伍長(48回)-(2006/06/06(Tue) 23:48:40)
Hongliang さんの Web サイト

分類:[C#] 

取りあえずここなど。
http://www.microsoft.com/japan/msdn/vs/debug/vberrdebuggingwindowsformscontrolscreatedwithvisualbasicnetorvisualcnet.asp
まずはブレークポイントをその手続きの先頭に置いて、一行ずつ実行して問題点を確認することが必要でしょう。
COM が混じってくるとなかなか難しいところもありますけどね。

ところで、ひょっとしてこのソース、一つのメソッドの中にこのまま書かれてるんですか……? とすると Navigate が非同期に行われるからという素晴らしくデバッグ困難な原因に行き当たりますが……。

0
引用返信 編集キー/
■4195 / inTopicNo.5)  Re[4]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ やま 二等兵(5回)-(2006/06/07(Wed) 01:04:30)

分類:[C#] 

返信ありがとうございます。
なるほど、ブレークポイントを使うのですね。

先のソースをもうすこし詳しく書くと、下記のようになってます。
private void buttonBuyingMarketPrice_Click(object sender, System.EventArgs e)
{
object url = aATag.href; //aATag.hrefの取得の記載は長いので省略
object flags = null;
object targetFrame = null;
object postData = null;
object header = null;
this.axWebBrowser.Navigate2(ref url, ref flags, ref targetFrame, ref postData, ref header);
}

private void axWebBrowser_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
HTMLDocument doc;
doc = (HTMLDocument)axWebBrowser.Document;
object o = "quick_menu"; //さっき抜けていました。

FramesCollectionClass frames = (FramesCollectionClass)doc.frames;
HTMLWindow2 frame = (HTMLWindow2)frames.item(ref o);
以下同様
}

ブレークポイントを設定したら、以下のように動いていました。
private void axWebBrowser_DocumentComplete(object …

FramesCollectionClass frames =…
までの実行を4回繰り返し。
その後、Webページが表示され、
HTMLWindow2 frame = …
以降のブレークポイントには止まりませんでした。
問題点は、FramesCollectionClass frames =…だとは分かりましたが、どこがおかしいのかが分かりません。
すみません、どなたかご教授願います。

0
引用返信 編集キー/
■4221 / inTopicNo.6)  Re[5]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ Hongliang 伍長(49回)-(2006/06/07(Wed) 15:34:36)
Hongliang さんの Web サイト

分類:[C#] 

フレームページを扱うのは色々面倒ですよねぇ。

ブレークポイントで止まらなくなると言うのが困ったところですが、次は try-catch で axWebBrowser_DocumentComplete メソッドの中をくくって例外が発生しているかどうかを確認する事でしょうか。何かが握りつぶされている可能性が高いです。
また、どうして axWebBrowser_DocumentComplete というイベントハンドラが何回も呼び出されるのかも調べる必要があるでしょう。この辺は……イベント名と"複数" とかのキーワードで検索するのが良いかな?
// すでにこの問題を理解しているのならお節介でした。

それはそれとして、mshtml を扱う場合、できる限り 〜〜Class ではなくて I〜〜 を使うようにしましょう。つまり、クラスにキャストするのではなくインターフェイスにキャストしましょう。
そちらの方が色々安全です。

0
引用返信 編集キー/
■4227 / inTopicNo.7)  Re[6]: フレーム分割されたページのインプットボックスとボタン
□投稿者/ やま 二等兵(6回)-(2006/06/07(Wed) 23:47:06)

分類:[C#] 

返答ありがとうございます。
try-catchやってみました。
エラーメッセージは以下の通りです。
Exception Type = System.InvalidCastException
Exception Message = 指定されたキャストは有効ではありません。
Exception StackTrace = at _QuickOdrer.FormOrder.axWebBrowser_DocumentComplete(Object sender, DWebBrowserEvents2_DocumentCompleteEvent e) in c:\documents and settings\yama\デスクトップ\quickorder\formorder.cs:line 921
921行目は、FramesCollectionClass frames = (FramesCollectionClass)doc.frames;です。
どうやら、(FramesCollectionClass)が駄目なようですね。

参考にしたページを良く読むと、”ASP.NET 2.0(C#) のメモ書き”って書いてあります。
ひょっとして、Visual C#.NETとは若干違うのでしょうか?

何回も呼び出されるのは、フレームの読み込みが完了するたびに呼び出されるようです。
条件付けて、目的のフレームのときだけ処理するようにします。

インターフェイスにキャストの件は、了解です。

最悪分からないときは、携帯のページならフレームがないので、そちらを使用しようかと考えています。

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -