利用WebBrowser打开一个网页,但是现在我想实现如何读取打开网页中的表单值或者给表单赋值,请赐教,来都给分。
------解决方案--------------------------------------------------------
只能把Delphi做成一个控件ocx,ocx控件可以提供一个外部接口能够访问,当你打开web页面时,页面加载ocx所在的包,再加上js代码访问,
参考:
1.加载控件
<object id="uprint" classid="CLSID:7D79186A-EA0D-49F9-B104-E7AE9DA1B7FB" width="0"
height="0" codebase="../Report/uprintct.CAB#version=1,2,0,1">
2.js代码
function $(obj)
{
return document.getElementById(obj);
}
function print(billctl,reportname)
{
var servername;
var userid;
var password;
var bill_no;
var dbname;
servername= $('serverinfo').value.split(';')[0];
userid= $('serverinfo').value.split(';')[1];
password= $('serverinfo').value.split(';')[2];
dbname =$('serverinfo').value.split(';')[3];
if (billctl!='')
{
bill_no = $(billctl).value;
}
else
{
bill_no =$('serverinfo').value.split(';')[4];
}
$('uprint').openrpt(servername,userid,password,dbname,reportname,bill_no);
}
------解决方案--------------------------------------------------------
提交表单是老话题了,可以搜一下,有很多提交表单的代码的.
二楼说"只能把Delphi做成一个控件ocx"应该不对吧.不要说WEBBORWSER,就是IE,一样可用DELPHI遍历上面的元素,提交表单对DELPHI也是小儿科.
------解决方案--------------------------------------------------------
利用网页中JavaScript获取网页中的值. 以下是一段实例,参考
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;
------解决方案--------------------------------------------------------
sCondition := 'newpoi('+QuotedStr('西直门宾馆')
+','+QuotedStr('北京市西城区西直门内大街172号')
+','+ quotedStr(' ')
+',' +QuotedStr(x)
+',' +QuotedStr(y)
+',' +QuotedStr(sID)+');';
//此句调用网页的javaScript中newpoi()方法;
(WebBrowser1.Document as IHTMLDocument2).parentWindow.execScript(sCondition, 'javascript') ;