C# 文字列型のhtmlから要素を取得する方法

このQ&Aのポイント
  • C#で文字列型のHTMLから要素を取得する方法について説明します。
  • WebBrowserを使用して文字列型のHTMLを表示し、そのHTMLから指定した要素を取得する方法を解説します。
  • foreach文を使用して指定した要素を検索し、条件に一致する要素の属性値を取得する手順を説明します。
回答を見る
  • ベストアンサー

C# 文字列型のhtmlから要素を取得したい

textBox1.Text = "<li>aaaaa</li><a id="link" href="http://yahoo.co.jp" >bbbbb</a><p>ccccc</p>"; WebBrowser webbrowser = new WebBrowser(); webbrowser.DocumentText = textBox1.Text; HtmlElementCollection elements = webbrowser.Document.GetElementsByTagName("a"); foreach (HtmlElement element in elements){ if (element.GetAttribute("id") == "link"){ str = element.GetAttribute("href"); } } MessageBox.Show(str); このようにソースを書いたのですが、http://yahoo.co.jpをポプアップで表示することができません。 webBrowserに表示しているサイトのHTMLに対して行うときはほとんど同じ方法で取得ができるので、文字列に原因があるだろうということはわかるのですが、何がいけないかがイマイチわかりません。 ステップ実行したところ、foreachの中にはいらないようです。なぜ入らないのでしょうか?どうすればはいるのでしょうか? よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

WebBrowserにURLを設定して、すぐにhtmlからコレクションを得ようとしていますが、ご存じのとおりブラウザというもは通信が間にあるのですぐには表示できない、つまりはすぐには全てのhtml要素を表示できていないので、その為にコレクションに入ってないのではないでしょうか。 WebBrowserのイベントで読み込みが終わると呼ばれるものがあるので、そのあたりから調べてみてはどうでしょうか。 頑張ってください。

satisfied999
質問者

補足

webbrowser.DocumentText = textBox1.Text; は、URLではなく、htmlそのものを入れています。通信は起こらないと思うので、別の理由があると思います。

関連するQ&A

  • C# htmlの一部の文字取得

    C#のwebBrowserで表示されているtextを表示させたいです。 htmlが <div class="AAA"> BBB </div> となっており、BBBのtextを取得したい場合、 HtmlElementCollection elem = webBrowser0.Document.GetElementsByTagName("div");   foreach (HtmlElement element in elem)   {    if (element.GetAttribute("class") == "AAA")  {  str = element.InnerText;  } } と、しましたが、上手く取得出来ません。 ご教授頂ければ助かります。

  • C#のNavigateメソッドの質問です

    昨日はじめてC#を触った初心者です。 C# Windows フォーム アプリケーションを作成しております。 作りたいアプリはあるページを移動しながらそれぞれのリンクを取得していくアプリです。 いろいろ調べながら作成したソースを以下に記します。 private void button3_Click(object sender, EventArgs e) { int i = 1; String stView = ""; String url=""; String num = i.ToString(); while (i<=10) { num = i.ToString(); url = "http://...........page=" + num; //(←ここに取得したいアドレスが入ります) webBrowser1.Navigate(new Uri(url)); // 現在のページ内リンクのコレクション取得 HtmlElementCollection hecList = webBrowser1.Document.Links; // リンクのコレクションからURLリスト文字列作成 foreach (HtmlElement elm in hecList) { // HTML要素のhref(リンク先)属性処理 if (elm.GetAttribute("href") != null) { stView += elm.GetAttribute("href").ToString(); stView += "\r\n"; } } i++; } richTextBox1.Text = stView; } これでデバッグしてみたのですがNavigateのあとのDocumentが変わってくれません。 どのようにすればよいかアドバイスをお願いいたします。

  • name テキスト 画像名等が無いリンクをクリック

    VBで特定のリンクをクリックしたく様々なソースを 見て似たような記述は数多く見かけたのですが、 私のクリックしたいリンクが特殊でどうもうまく クリック出来ません。 ■Visual Studio、Windowsフォームアプリケーション利用 ■クリックしたいリンクについて ・<li class="menu_cate"><a href="new.html" title="NEWページ"></a></li> 「リンク詳細」 リンク先は画像となっており、画像名がありません。 li class、a href それぞれの値(menu_cate、new.html)は、共にページ内では1つだけです。 上記のリンクをクリックしたいので、「menu_cate」、「new.html」、「NEWページ」のいずれかを 検知してクリックをしたいと思い下記を記述してみたのですがうまくいきません。 是非どなたかご教授くださいますようお願い致します。 Dim Element As HtmlElement = Nothing For Each Element In WebBrowser1.Document.All.GetElementsByName("A") If Element.InnerText = "NEWページ" Then Element.InvokeMember("Click") 'クリックする Exit For End If Next ※Element.InnerTextの部分は色々変えてみたのですが、 リンクできませんでした。

  • htmlから特定の文字を取得するには

    VB2005初心者です webbrowserコントロールで表示させたwebページのソースの中にある 特定の文字を取得したいんですけど 例えば <a href="http://〇〇〇〇〇〇〇〇〇〇/〇〇/〇〇/△△△△△△△">△△△△△△△</a> <a href="http://〇〇〇〇〇〇〇〇〇〇/〇〇/〇〇/□□□□□□□">□□□□□□□</a> というhtmlの中から △の文字列と□の文字列だけテキストボックスに表示をさせたいのですが どうすればよいのでしょうか? △はTextBox1 □はTextBox2 の様な感じにしたいです 正規表現やInStr関数など試してみたのですがうまくいきません どなたかご教授お願いしたします ソースなど記述して頂けると助かります

  • C#のコードについて質問です

    C#でWebページのテキストボックスに文字を入力しようと 試みましたが、どうしてもこのページだけできません。 このページです。 https://account.edit.yahoo.co.jp/registration?.intl=jp&.done=http%3a//promo.mail.yahoo.co.jp&.src=ym ヤフーメールの新規登録画面なんですが、最初の 「Yahoo! JAPAN ID」から躓いてます。 コードは以下のように書きました。 HtmlElementCollection all = WebBrowser1.Document.All; HtmlElementCollection forms = all.GetElementsByName("u"); forms[0].InnerText = TextBox1.Text; 2行目最後の「u」は「Yahoo! JAPAN ID」のnameなので 間違いはないと思うのですが・・・ ちなみに上記のコードで他のサービスでは普通に入力できます。 色々と試しましたが失敗続きで途方に暮れてます。 妙な質問ですが、よろしくお願い致します。

  • C# ブラウザの自動クリック

    C#のwebBrowserで開いたページを自動でクリックしたいんですが、htmlが <li id="A"><a href="B" title="C">C</a></li> この様になっておりますので、 .Document.GetElementById("A").InvokeMember("click"); とIDタグからのクリックを試みましたが、動作しません。 何が間違えているのかご教授下さい。

  • jquery tab要素に文字列追加

    jqueryのタブ要素にinnerhtmlで文字列を挿入したいのですが、なぜかどのような文字列を挿入しても 先頭に"undefined"の文字が挿入されてしまいます。 この文字列が入らないようにするにはどのようなコードを書く必要があるのでしょうか? ご教授お願いします。 コード例は下に記載させて頂きました。 <div style='clear:both;' id="tabdemo1"> <ul> <li><a href="#ex1">ex1</a></li> <li><a href="#ex2">ex2</a></li> </ul> <div id="ex1"> </div> <div id="ex2"> </div> </div> var html; html="Hello world"; document.getElementById("ex1").innerHTML += html;

  • 文字列を順番に置換

    以下の様な文字列があった時、それぞれのaタグにidをa1、a2、a3、…と順番につけていくにはどのような正規表現を行えばいいのでしょうか。 <ul> <li><a href="url1" title="title1">link1</a></li> <li><a href="url2" title="title2">link2</a></li> <li><a href="url3" title="title3">link3</a></li> <li><a href="url4" title="title4">link4</a></li> <li><a href="url5" title="title5">link5</a></li> <li><a href="url6" title="title6">link6</a></li> </ul> aタグの数がいくつでも対応できるようなものが望ましいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • li 3列表示

    こんにちは、 下記のliを3列づつ表示したいのですが、 どのようにすればよいでしょうか? (2列とかはあるのですが・・・tableにすべき?) <ul id="leftlist1"> <li><a href="#">a1</a></li> <li><a href="#">a2</a></li> <li><a href="#">a3</a></li> </ul> <ul id="leftlist2"> <li><a href="#">b1</a></li> <li><a href="#">b2</a></li> <li><a href="#">b3</a></li> </ul> <ul id="leftlist3"> <li><a href="#">c1</a></li> <li><a href="#">c2</a></li> <li><a href="#">c3</a></li> </ul>

    • ベストアンサー
    • CSS
  • innerHTMLでドロップダウンメニューの作り方

    CSSだけで作るドロップダウンメニューのHTMLの構造って↓みたいな感じらしいんですが、 <ul id="dropmenu"> <li><a href="#">メニュー</a> <ul id="submenu"> <li><a href="#">サブメニュー</a></li> <li><a href="#">サブメニュー</a></li> <li><a href="#">サブメニュー</a></li> <li><a href="#">サブメニュー</a></li> </ul> </li> </ul> これのサブメニューを配列からinnerHTMLで生成するときに、 var links=""; site[0]={link:'http;www',title:'アマゾン'}; site[1]={link:'http;www',title:'紀伊国屋'}; site[2]={link:'http;www',title:'ヤフーオークション'}; for(var m = 0; m < site.length; m++){ links += '<li><a href=" '+site[m]['link']+' ">'+site[m]['title']+'</a></li>'; } document.getElementById("submenu").innerHTML=links; <html> <body> <ul id="dropmenu"> <li><a href="#">メニュー</a> <ul id="submenu"> </ul> </li> </ul> </body> </html> で、全く動きません。勉強中の自分には何処がオカシイのかすら分かりません。 何処がオカシイか指摘してください。または、もっとスマートに出来る方法がありましたら、ヒントだけでもご提示いただけたら幸いです。 よろしくお願いいたします。

専門家に質問してみよう