2010-08-19 95 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