我在更改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>
如果你能告诉我如何更改<input type="text" name="register_vv[q][71]" size="30" value="" tabindex="6" class="input_text" />
中的值,我会非常感激。
感谢阅读和所有回复。
答案 0 :(得分:7)
试试这个:
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标准模式和以前的模式中,此方法对ID
和NAME
属性执行不区分大小写的匹配,这可能会生成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:='test';
我很确定OP没有测试您的代码( 默认情况下应该工作,除非OP明确改变IE浏览模式),并使用{{1}而不是 - 这是一个getElementByID('verification_control_0')
元素,并且没有支持方法DIV
。 (因此错误消息value
)。
答案 1 :(得分:0)
你的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';