0

C# コード:

GeckoElementCollection _Ellements = geckoWebBrowser1.Document
    .GetElementsByTagName("input");

foreach (GeckoElement _e in _Ellements)
{
    if (_e.GetAttribute("value") == "username"
    {
        // Code here if statement = true
    }

}

HTML コード:

<input type="text" name="user" id="smf_autov_username" size="30" tabindex="1" maxlength="25" value="" class="input_text">

このコードは、ユーザーがテキストボックスの内容を変更したかどうかを確認するために毎秒呼び出されますが、機能しません。助けてください :(

4

2 に答える 2

0

あなたの質問を正しく理解していれば、問題は、通常は a の一部である要素の値が<form>、DOM を読み取るだけでは利用できないことです。ブラウザは、フォームが送信されるときにそれらが使用されることを期待しています。

幸いなことに、値を C# プログラムで使用できるようにすることは難しくありません。これは、javascript値を読み取って、C# が取得できる場所に配置できるためです。@value を c# が参照できる属性 (@data-value など) にコピーする JavaScript が少し必要です。これは、ぼかしまたはキーアップ ハンドラー中に実行できます。例えば:

<input id="foo" onblur="this.setAttribute('data-value', this.value)"></input>

これは、「ぼかし」イベントが発生したとき (たとえば、フィールドを離れたとき)、値を「data-value」という名前の別の属性にコピーすることを示しています (その名前について特別なことは何もありません。data-foobar という名前でもかまいません)。 . 次に、C# では、次のように読むことができます。

if(_e.GetAttribute("data-value")) == "username")

その他の例については、次の stackoverflow の質問を参照してください。

さて、何かのイベントでトリガーするのではなく、毎秒チェックしていることがわかります。ぼかしの代わりに、すべてのキーアップでデータ値へのコピーを実行したい場合があります。必要に応じて、C# で自分でぼかしを作成することもできます。

var activeElement = _browser.Window.Document.ActiveElement;
if(activeElement!=null)
    activeElement.Blur();
于 2013-10-28T23:18:13.360 に答える
0

次のようなことを試してください:

foreach (GeckoElement element in elements)
{
    GeckoInputElement input = (GeckoInputElement)element;
    if (input.Value == username)
    {
        //
    }    
}
于 2013-10-28T12:59:14.410 に答える