首先要在uses中引用mshtml单元. 代码及分析如下: var
hform:IHTMLFormelement;
hdoc:ihtmldocument2;
hall:ihtmlelementcollection;
Hinput:IHTMLinputelement;
iw:iwebbrowser2;
hlen,tmploop:integer;
vk:oleVariant;
dispatch:IDispatch;
begin
if Assigned(webbrowse1) then ///保证网页里有内容;即已经打开一个网页!
begin
hdoc:=webbrowse1.document as ihtmldocument2;
hall:=hdoc.get_all;
hlen:=hall.get_length;
////以上几步的操作为:将浏览器控件里的内容赋给hdoc.取其所有标识,并算出总数;
////下面的操作为:按总数循环找到用户名和密码的edit;并赋值;
for tmploop:=0 to hlen-1 do begin vk:=tmploop;
dispatch:=hall.item(vk,0);
if succeeded(Dispatch.QueryInterface(IHTMLInputelement,hinput)) then
///如果此标识是一个edit控件.....
begin ////下面这里的uppercase是必需的!防止因大小写的不同而判断失误!
///下面的"TEXT"是由网页里的内容来确定的.也就是说你要判断就必需根据具体网页代码来!
///密码框和用户名处是一样的!
if uppercase(hinput.Type_)='TEXT' then hinput.value:='tresss'
else if uppercase(hinput.type_)='PASSWORD' then hinput.value:='tresss';
end;
if succeeded(dispatch.QueryInterface(IHTMLFormElement,hform))
and (uppercase(hform.name)='THEFORM')
then
///此处是form提交.如果从html发现只有一个form的话那第二个条件是非必需的!
///而且也不一定要判断name属性,也可以根据其它属性来判断.
Hform.submit;
end; ////for end;
end; //if end;
end;
我在网站上看到很多这个源码。但是调试到 dispatch:=hall.item(vk,0); 提示参数不足,不能调试通过。希望那位高手给答复
hform:IHTMLFormelement;
hdoc:ihtmldocument2;
hall:ihtmlelementcollection;
Hinput:IHTMLinputelement;
iw:iwebbrowser2;
hlen,tmploop:integer;
vk:oleVariant;
dispatch:IDispatch;
begin
if Assigned(webbrowse1) then ///保证网页里有内容;即已经打开一个网页!
begin
hdoc:=webbrowse1.document as ihtmldocument2;
hall:=hdoc.get_all;
hlen:=hall.get_length;
////以上几步的操作为:将浏览器控件里的内容赋给hdoc.取其所有标识,并算出总数;
////下面的操作为:按总数循环找到用户名和密码的edit;并赋值;
for tmploop:=0 to hlen-1 do begin vk:=tmploop;
dispatch:=hall.item(vk,0);
if succeeded(Dispatch.QueryInterface(IHTMLInputelement,hinput)) then
///如果此标识是一个edit控件.....
begin ////下面这里的uppercase是必需的!防止因大小写的不同而判断失误!
///下面的"TEXT"是由网页里的内容来确定的.也就是说你要判断就必需根据具体网页代码来!
///密码框和用户名处是一样的!
if uppercase(hinput.Type_)='TEXT' then hinput.value:='tresss'
else if uppercase(hinput.type_)='PASSWORD' then hinput.value:='tresss';
end;
if succeeded(dispatch.QueryInterface(IHTMLFormElement,hform))
and (uppercase(hform.name)='THEFORM')
then
///此处是form提交.如果从html发现只有一个form的话那第二个条件是非必需的!
///而且也不一定要判断name属性,也可以根据其它属性来判断.
Hform.submit;
end; ////for end;
end; //if end;
end;
我在网站上看到很多这个源码。但是调试到 dispatch:=hall.item(vk,0); 提示参数不足,不能调试通过。希望那位高手给答复
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货