質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2092閲覧

C# wbBrowserの.Navigate(new Uri(address))でURLをセットすると、GetAttributeで値が取得できない

KentarouOgura

総合スコア105

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/10/06 20:14

いつもお世話になっております。
またまた大変困り果てておりまして、どなたか、おつきあい頂けましたら幸いです。

.GetAttribute("className")でクラス名を取得するという処理を作成しているのですが、wbBrowserのプロパティに直接URLをセットした場合なら値がきちんと取得できるのに、全く同じURLをプロパティにセットでは無く、

.Navigate(new Uri(address))で.GetAttribute("className")の直前にURLをセットすると値が取得できません。

プロパティにURLをセットすると、webBrowser.Document.Allにデータが入っている事を確認できるのですが、.Navigate(new Uri(address))でURLをセットすると、webBrowser.Document.Allにきちんとデータが入りません。

このようになってしまうのは、どうしてなんでしょう?

どなたか、ご教授頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

布団の中で検証できないのであとで試してみたいとは思いますが、Navigate直後に、Application.DoEventを行うとどうですか?
変化なしでしょうか。

投稿2015/10/06 22:17

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KentarouOgura

2015/10/06 23:52

わぁお!!神様!!! 布団の中からありがとうございます!!! さっそくやってみました! ただ、Application.DoEvents();では変化なしでした。。。(;_;)
Tak1wa

2015/10/07 00:11

確認ありがとうございます。 試してみましたが確かにドキュメントが取得できていませんね。 レスポンス取得に時間がかかるのは当然のことだと思うので、WebBrowserのDocumentCompletedイベントなど、Documentが取得できた後にチェックを行うようにしてはどうでしょうか。 ちなみにこちらでは、 > プロパティにURLをセットすると、webBrowser.Document.Allにデータが入っている事を確認できるのですが 上記が確認できませんでした。(Navigateさせた時と同じ。)
KentarouOgura

2015/10/07 01:00

はい!いろいろありがとうございます! まずはDocumentCompletedイベント試してみます! URLにセットさせて、データが確認できませんでした?? おかしいな。。。はい、それも確認してみますm(_ _)m
KentarouOgura

2015/10/07 02:52

神様。。。やってみたのですが。。。うまくいきませんでした。。。 private void button6_Click(object sender, EventArgs e) { // Create a WebBrowser instance. WebBrowser webBrowserYearLabel = new WebBrowser(); // Add an event handler that prints the document after it loads. webBrowserYearLabel.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetYaerLabel); // Set the Url property to load the document. webBrowserYearLabel.Url = new Uri(@"http://web.archive.org/web/20120715000000*/http://www.abcportalrecetas.com"); } private void GetYaerLabel(object sender, WebBrowserDocumentCompletedEventArgs e) { string[] href_data = new string[0]; int i = 0; // year-label ラベルを検索 foreach (HtmlElement current in webBrowser.Document.All) { if ("year-label ".Equals(current.GetAttribute("className"))) { Array.Resize(ref href_data, i + 1); href_data[i] = current.GetAttribute("href"); i++; } } } これなんですが。。。 ただ、全く同じコードのまま、プロパティにURLを設定したら、うまく取得出来るんです。。。 他に何がいけないんでしょう。。。
Tak1wa

2015/10/07 03:42

WebBrowser webBrowserYearLabel = new WebBrowser();とforeach (HtmlElement current in webBrowser.Document.All) 上記それぞれのWebBrowserは別物という認識はされてますか?このロジックだけ見るとforeachで使用しているwebBrowserはどこにもナビゲートされていません。
KentarouOgura

2015/10/07 04:01

あぁ、なるほど!!! つまり、引数で渡すとか、何か関連付けないと言わない訳ですね? やってみますm(_ _)m
KentarouOgura

2015/10/07 04:09

うまくいきました!!! っていうか、値を参照渡しとかどういうことではなくて、webBrowserをnewでクリエイトするのではなく、フォームに張り付いているwebBrowserでやればうまくいきました!!! private void button6_Click(object sender, EventArgs e) { // Add an event handler that prints the document after it loads. webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetYaerLabel); // Set the Url property to load the document. webBrowser.Url = new Uri(@"http://web.archive.org/web/20120715000000*/http://www.abcportalrecetas.com"); } private void GetYaerLabel(object sender, WebBrowserDocumentCompletedEventArgs e) { string[] href_data = new string[0]; int i = 0; // year-label ラベルを検索 foreach (HtmlElement current in webBrowser.Document.All) { if ("year-label ".Equals(current.GetAttribute("className"))) { Array.Resize(ref href_data, i + 1); href_data[i] = current.GetAttribute("href"); i++; } } } ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問