2010-08-19 44 views
0

我正在使用此代码填写一些网页的领域,使用WebBrowser控件:我的代码无法找到场(德尔福 - 的Webbrowser)

procedure TFrmMain.SetValue(const document: IHTMLDocument2; 

    const formNumber: Integer; 

    const fieldName, newValue: string); 
var 
    form: IHTMLFormElement; 
    field: IHTMLElement; 
begin 
    form := WebFormGet(formNumber, document); 
    field := form.item(fieldName, '') as IHTMLElement; 
    if field = nil then 
    exit; 
    if field.tagName = 'INPUT' then (field as IHTMLInputElement) 
    .value := newValue 
    else if field.tagName = 'SELECT' then (field as IHTMLSelectElement) 
    .value := newValue 
    else if field.tagName = 'TEXTAREA' then (field as IHTMLTextAreaElement) 
    .value := newValue; 
end; 

但“的SetValue”方法不能填写领域为此网页! : http://commenting.iranblog.com/services/commenting/commenting.aspx?BlogID=67436&PostID=754352

SetValue(W.document as IHTMLDocument2, 0, 'name', 'ThisIsANewValueForField'); 

事实上,我认为这个网页的验证码无法找到字段名,但我不知道原因!

+1

发生了什么或没有发生什么? – 2010-08-19 15:53:28

+1

有趣的缩进... – 2010-08-19 16:14:01

回答

1

名称为“名”的唯一字段是被定义的一个作为

<input onKeyPress=FKeyPress() id=name onBlur=hideLanguageButton() 
     onFocus=showLanguageButton(this) maxlength=50 size=50 
     name=name> 

但是,这是唯一形式的封闭形式的标签(</form>)页面(形式_ctl0)后,所以技术上不是第一种。因此,使用页面上的第一个表单加载的IHTMLFormElement将不包含“name”字段。

1

如果WebFormGet返回nil,那么你调用该变量的方法,这肯定会导致程序崩溃。你没有说你的代码崩溃了,所以我们可以假设WebFormGet成功获取表单。

但如果WebFormGet返回nil,然后你从来没有任何值分配在所有field,所以这将有nil其编译器分配的默认值。你检查field = nil是否退出。

因此,我们现在可以得出结论,您正在报告的问题与您正在测试的特定网页完全无关。您的代码将在全部页面上失败。这不是说你的代码不能在找到这个字段;你的代码甚至从来没有寻找该字段。

你可能已经发现这个问题与你的调试器。不要害怕使用你拥有的工具。您可以在该过程中设置一个断点,并逐行执行一行代码。在每一行,确认你所期望的事实是真的。您期望field可以指您指定的字段,但始终是nil。然后,您可以回顾前面的代码,找出原因。你会看看field可能达到非空值的所有可能方式,然后找出为什么没有发生这些事情。您最终会仔细重新仔细阅读您的代码,以发现没有办法为field获得价值。

如果您解决了该问题并且您的代码仍然无法工作,请重复相同的过程。使用调试器遍历代码并确保每一步都按预期工作。如果不起作用,请尝试确定失败的原因。

+0

谢谢肯尼迪先生!正如Re0sless所说,Field('name')的格式不是(0),当我跟踪我的代码(使用Shift + F7)时,我意识到“WebFormGet”的结果不是零。因此,我们有形式,但我们的领域不是这种形式。所以我怎么能找到他们没有任何形式的领域? – Kermia 2010-08-19 19:03:55

+0

忽略表单并使用['getElementById'](http://msdn.microsoft.com/zh-cn/library/aa752543。aspx)或['getElementsByName'](http://msdn.microsoft.com/en-us/library/aa752544.aspx)。 – 2010-08-19 19:09:42

+0

我编辑了我的代码!它有一个问题 – Kermia 2010-08-19 19:13:51