访问WebBrowser1.OleObject.Document.getElementById('输入名称')时出现无效的变量操作错误.setAttribute

时间:2016-11-09 13:32:21

标签: delphi twebbrowser

我在Delphi XE7(win7,Internet Explorer 9)中使用TWebBrowser组件来填写网页中的表单。

这是HTML:

<input name="login" class="form-control" id="inputLogin" placeholder="Username" type="text">

我正在使用此代码:

WebBrowser1.OleObject.Document.getElementById('InputLogin').setAttribute('value','sometext');

它在我的电脑上工作得很好,但在其他电脑上,它给了我这个错误:

Invalid Variant Operation error.

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

setAttribute不是为value元素设置/获取input的首选方式。

使用IHTMLInputElement接口访问目标输入元素的value,例如:

uses MSHTML;

var
  el: IHTMLElement;
  inputElement: IHTMLInputElement;

el := (WebBrowser1.Document as IHTMLDocument3).getElementById('inputLogin');
if Assigned(el) then
  if Supports(el, IID_IHTMLInputElement, inputElement) then
    inputElement.value := 'sometext';

我无法重现您所获得的错误,因此如果您坚持使用setAttribute,则可能需要尝试显式设置文档的界面,而不是访问OleObject.Document Variant。

e.g:

el := (WebBrowser1.Document as IHTMLDocument3).getElementById('inputLogin');
if Assigned(el) then
  el.setAttribute('value', 'sometext', 0);