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# 可以获取的位置。您只需要使用一些 javascript 将 @value 复制到您的 c# 可以看到的属性(如 @data-value)。这可以在 blur 或 keyup 处理程序期间完成。例如:

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

这表示当“模糊”事件发生时(例如,当您离开字段时),将值复制到另一个名为“数据值”的属性(该名称没有什么特别之处,它也可以命名为 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 回答