Ошибка недопустимой операции варианта при доступе к WebBrowser1.OleObject.Document.getElementById ('Inputname'). SetAttribute

Я использую компонент TWebBrowser в Delphi XE7 (win7, internet explorer 9) для заполнения формы на веб-странице.

Вот 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.

Как я могу это исправить?


person kaleeeed    schedule 09.11.2016    source источник
comment
Я предполагаю, что на другом компьютере отсутствует DLL. Это может быть один из ваших собственных проектов Delphi или MS dll, необходимая компоненту браузера. На другом ПК установлена ​​другая версия браузера? - Кроме того, document.getElementById чувствителен к регистру - ›в вашем идентификаторе нет заглавной буквы« Ввод .... »   -  person Thor    schedule 09.11.2016


Ответы (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);
person kobik    schedule 09.11.2016
comment
Большое спасибо, kobik, это было очень полезно, да, действительно, использование setattribut вызывает проблему недопустимого варианта (значение может быть пустым). Еще раз спасибо, вы сэкономите мне много времени и сил. - person kaleeeed; 10.11.2016
comment
Добро пожаловать. Если это ответ на ваш вопрос, пожалуйста, примите его. Кстати, из любопытства: сработал ли второй подход через el.setAttribute на другом ПК? - person kobik; 10.11.2016
comment
да, похоже, что значение варианта всегда равно нулю для моего первого решения - person kaleeeed; 14.11.2016