2017-07-05 7 views
1

私はこれを持っている私のWebブラウザーLoadCompleteコールバックでC#でWPFとWPF WebBrowserを使用して私は実際に個人的なプロジェクトで作業しています。#WPF Webbrowser msHTML - DOMの探索 - 要素の検索

private mshtml.HTMLDocument mainDocument = new mshtml.HTMLDocument(); 

::私たちは私のメインウィンドウで

をJavaScriptでやるかphp..etcするために使用されるように、私は本当に私は、この変数を持っているHTML DOM要素を検討する必要がある

mainDocument = (mshtml.HTMLDocument) mainBrowser.Document; 

これはうまく動作しています。

私はこれを行う場合今:

mshtml.IHTMLElement elem = mainDocument.getElementById("MY_ID"); 

それはelem.innerHTMLまたはそのようなサムスものを行うことができ、また、非常にうれしいです。

しかし、私の問題は、私はIHTMLElement内の要素を見つける方法がわからないtagnames..etc

により、IDによって要素を見つけるために、methodesを持っているのHTMLDocumentだけです。私はIHTMLElement2..etcにIHTMLElementをキャストするようなものを試しましたが、何も動いていませんでした。

ご意見がありましたらお知らせください。多くの人がwinforms webbrowserのホスティングについて語っていますが、mshtmlだけでそれを行う方法が必要だと思います。

どうもありがとう、 あなたはより多くの情報が必要な場合は、私に

PSをお気軽にお尋ねください。私はフランス人だので、あなたがHTMLを解析したい場合は、私は私のEngishスキル

答えて

0

について申し訳ありませんWinformsまたはwpfのドキュメントでは、優れたパーサーhtmlagilityパックを使用できます。それはちょうどドキュメントを少し探検し、あなたが作ることができ、超簡単です

var value = doc.DocumentNode 
.SelectNodes("//td/input") 
.First() 
.Attributes["value"].Value; 

など、タグ、ドキュメントでそれをロードした後、リンク以下 http://html-agility-pack.net

var url = "http://html-agility-pack.net/"; 
var web = new HtmlWeb(); 
var doc = web.Load(url); 

を参照してください、あなたが任意の属性を取得することができますそれを十分に使います。

あなたは

HtmlAgilityPack.HtmlDocument doc = new 
HtmlAgilityPack.HtmlDocument(); 
      doc.Load(webBrowser1.DocumentStream); 

それとも、あなたの助けのために

+0

確かに、もし私たちがすでにWPF WebBrowserの 'Document'プロパティにHTML文書を持っていたら?ドキュメント全体をリロードしなくても、HTML全体にアクセスしてHtmlAgilityPackを初期化することができますか? – Clemens

+0

はい、そうすることができます。以下はあなたがそれを行う方法です。 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.Load(webBrowser1.DocumentStream); または次のように指定できます。 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.Load(webBrowser1.Document); 上記の変更を含めるために私の上記の回答を編集しました。 – Sujit

+0

答えが役に立たない場合は、回答としてマークしてください。他の人も同様に利益を得ることができます。 – Sujit

0

おかげでたくさんの@Sujitこの

HtmlAgilityPack.HtmlDocument doc = new 
HtmlAgilityPack.HtmlDocument(); 
      doc.Load(webBrowser1.Document); 

おかげのように行うことができます以下のような、でもウェブブラウザからHTMLの敏捷性パックをロードすることができます。 私はあなたの答えを参考にして評判を表明しているわけではありませんが、他人がそれを期待しています。あなたがそのような原料を行うことができた後

using System.Linq; 

これを使うべきで

mainHTMLDoc.LoadHtml((mainBrowser.Document as mshtml.HTMLDocument).documentElement.innerHTML); 

はすべてを操作するには:

は、それは私がやったWPFのウェブブラウザで動作する取得するには

var table = mainHTMLDoc.GetElementbyId("MyID"); 
var rows = table.Element("tbody").Elements("tr"); 
for(int i=0; i< rows.Count();i++) { 
    var datacol1 = rows.ElementAt(i).Elements("td").ElementAt(0).Descendants("a").ElementAt(0).InnerHtml; 
    var datacol2 = rows.ElementAt(i).Elements("td").ElementAt(1).InnerText 
} 

Linqを使用しているWhitoutでは、非常に便利なElements関数を使用することはできません! もう一度ありがとうSujit :)

+0

いいえ、問題はありません。ではごきげんよう! – Sujit

関連する問題