2011-06-03 14 views
1

誰かが私にこの方向を教えてくれるのだろうかと思っていました。私はそれにかなりの時間を費やして、どこにでもいるように見えない:VB.NetでMSHTMLを使用してHTMLを解析する

私はVB.NetのHTML文書を解析しようとしている隠しフィールドがあります。 WPFアプリケーションでSystem.Windows.Controls.WebBrowserコントロールを使用して、LoadCompletedイベントを処理しています。

Dim htmlDocument As mshtml.IHTMLDocument2 = Me.WebBrowser.Document 
Dim allElements As mshtml.IHTMLElementCollection = htmlDocument.body.all 
Dim hiddenField As mshtml.IHTMLInputElement = allElements.tags("hidField") 

私がアクセスしようとしている隠しフィールドのような私の.aspxファイルで宣言されています:

<asp:HiddenField runat="server" ID="hidField"/> 

問題はこのことですLoadCompletedイベントハンドラ内で、私はこのような何かをallElements.tags("hidField")がnullを返しています。 mshtmlライブラリに何か問題がありますか?私はそれについて多くの経験を持っておらず、私の隠されたフィールド要素を見つけるためにこのようなことをする必要があることを集めました。あなたがより多くの情報を必要とするかどうか私に教えてください。事前に助けてくれてありがとう。

EDIT
ここだが興味を持つ人のための私の最終作業溶液である:私はMSHTMLを使用するので

Dim htmlDocument As mshtml.IHTMLDocument2 = Me.WebBrowser.Document 
    Dim allElements As mshtml.IHTMLElementCollection = htmlDocument.body.all 
    Dim allInputs As mshtml.IHTMLElementCollection = allElements.tags("input") 

    For Each element As mshtml.IHTMLInputElement In allInputs 
     If element.type = "hidden" And element.name.Contains("hidField") Then 
      MessageBox.Show(element.value) 
     End If 
    Next 

答えて

1

サーバサイドの値ではなく、レンダリングされたタグを探す必要があります。

これは<input type="hidden">と表示されるため、allElements.tags("input")を使用して特定の非表示のものを見つける必要があります。 id属性は、hidFieldとして終了しない可能性があります。これは、コンテナコントロールの種類とネストレベルによって異なります。

HTML Agilty Packを使用してHTMLを解析し、代わりに要素を見つけることをお勧めします。これはMSHTMLよりも使いやすいはずです。

+0

これは意味があります。私はあなたが提案したことをやって、私が推測しているその行の例外を得るのをやめたのは、私がMSHTMLを正しく実行していないことです: 'System .__ ComObject'タイプのCOMオブジェクトをインターフェイスタイプ 'mshtml.IHTMLInputElement '次のエラーのため、IID '{3050F5D2-98B5-11CF-BB82-00AA00BDCE0B}'のインターフェイスのCOMコンポーネントのQueryInterface呼び出しが失敗したため、この操作は失敗しました:このようなインターフェイスはサポートされていません(HRESULT:0x80004002(E_NOINTERFACE)例外) 。 – Tom

+0

私はHTMLアジリティパックに試してみるかもしれません。 – Tom

0

そのはしばらくして、私の記憶が正しければ、あなたは htmlDocument.getElementById('hidField')

のようなものを使用する必要があります
+0

Hmmm ...他の場所でもこのメソッドが推奨されていましたが、mshtml.IHTMLDocument2オブジェクトでは使用できません。 – Tom