【问题标题】:Delphi Twebbrowser change value of textbox.Delphi Twebbrowser 更改文本框的值。
【发布时间】:2013-01-20 20:11:13
【问题描述】:

我在更改 twebbrowser 中文本框的值时遇到了一些困难。我尝试了WebBrowser1.OleObject.Document.getElementById('verification_control_0').value := 'mytext'; 和其他一些方法,但它似乎不起作用。

网站代码:

 <div id="verification_control_0" class="verification_control">
 <div class="smalltext">
 What are the first 3 letters of our website's name?:<br />
 <input type="text" name="register_vv[q][71]" size="30" value=""  tabindex="6"    class="input_text" />
  </div>
 </div>

如果您能告诉我如何更改 &lt;input type="text" name="register_vv[q][71]" size="30" value="" tabindex="6" class="input_text" /&gt; 中的值,我将非常感激。 感谢阅读和所有回复。

【问题讨论】:

  • WebBrowser1.OleObject.Document.getElementByID('register_vv[q][71]').Value:='test'; 似乎有效,不是吗?
  • 不,它不起作用。我收到一条错误消息“自动化对象不支持方法‘值’”。
  • 奇怪,我从这里的测试应用程序中复制粘贴了该行(XE2-ie8-w7)
  • 你用的是什么版本?
  • 如果你的问题是针对我的,我使用的是delphi 2009。

标签: delphi twebbrowser


【解决方案1】:

试试这个:

procedure TForm1.Button1Click(Sender: TObject);
var
  col: IHTMLElementCollection;
  el: IHTMLInputElement;
begin
  col := (WebBrowser1.Document as IHTMLDocument3).getElementsByName('register_vv[q][71]');
  if col.length <> 0 then
  begin
    el := col.item(0, 0) as IHTMLInputElement;
    el.value := 'mytext';
  end;
end;

在 IE8 标准模式下,getElementById 仅对 ID 属性执行区分大小写的匹配。
在 IE7 标准模式和以前的模式中,此方法对 IDNAME 属性执行不区分大小写的匹配,这可能会生成 unexpected results

因此,如果您的 TWebBrowser 在 IE7 标准模式下工作,而之前的模式 getElementById 应该也可以工作:

procedure TForm1.Button2Click(Sender: TObject);
var
  el: IHTMLElement;
  inputElement: IHTMLInputElement;
begin
  el := (WebBrowser1.Document as IHTMLDocument3).getElementById('register_vv[q][71]');
  if Assigned(el) then
    if Supports(el, IID_IHTMLInputElement, inputElement) then
      inputElement.value := 'mytext';
end;

使用getElementsByName 集合通过NAME 定位元素应该是首选解决方案。


编辑: @SertacAkyuz 第一条评论:

WebBrowser1.OleObject.Document.getElementByID('register_vv[q][71]').Value:='tes‌​t';

我很确定 OP 没有测试 您的代码(默认情况下 应该工作,除非 OP 明确更改 IE 浏览模式),而是使用 getElementByID('verification_control_0') - 这是一个DIV 元素,不支持value 方法。 (因此出现错误消息"Method 'value' not supported by automation object")。

【讨论】:

  • +1(已经)感谢您为我解决了一些困惑。
【解决方案2】:

您的 getElementById('verification_control_0') 将获得 DIV 元素,它没有“值”。

您的文本框没有 ID。对于测试,将“name”属性更改为“id”,如下所示

<input type="text" id="register_vv[q][71]" size="30" value=""  tabindex="6" class="input_text" />

并像这样更改您的代码

WebBrowser1.OleObject.Document.getElementById('register_vv[q][71]').value := 'mytext';

【讨论】:

  • 问题是该网站不属于我。通常,如果它有一个值,我可以毫无问题地通过它的 id 获得一个值。我希望 delphi 不仅限于 getelementbyid。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多