200分求救:数据内容怎样提交至IE中(200分)

  • 主题发起人 主题发起人 dboat
  • 开始时间 开始时间
D

dboat

Unregistered / Unconfirmed
GUEST, unregistred user!
一数据库要通过网页向远方提交
不想逐项粘贴,怎样做一软件向ie中自动填充对应数据项
IE窗口比较特殊,好象不能通过FindWindow、FindWindowEx等api找到
各位有什么好的方法吗?
 
gz

不过网上有好多关于自动填写表单的软件,找一下这方面的资料,应该可以!
 
是有好多类似的软件,可我不知道原理啊
而且我是要把数据库提交,非得自己写不可
 
懶得寫了﹐轉抄一段
主要是用 IShellWindows 接口來獲得 IE1的COM接口
然后用其 document 接口進行操作﹐兩個接口的說明可以看 MSDN

procedure TForm1.PutDataframe(iName,ss,sBtnName:String);
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j,k: integer;
vi,l,o: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
oneframe:Ihtmlwindow2;
S1,S2 : string;
HtmlInputEle : IHTMLInputElement;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;
for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin
if idoc1.frames.length<>0 then
for k:= 0 to idoc1.frames.length-1 do
begin
l:=k;
spDisp:=idoc1.frames.item(l);
if SUCCEEDED(spDisp.QueryInterface(IHTMLWindow2 ,oneframe))then
begin
for j:=0 to oneframe.document.all.length-1 do
begin
Application.ProcessMessages;
spDisp := oneframe.document.all.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then
with HtmlInputEle do
begin
S1:=Name;
S2:=Type_;
S2:=UpperCase(S2);
S1:=UpperCase(S1);
if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then
begin
if S1=UpperCase(iName) then
begin
value :=ss;
o:=oneframe.document.all.item(sBtnName,0);
o.click;
exit;
end;
end;
end;
end;
end;

end;
end;
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
putdataFrame('Words','嘻嘻嘻','submit');
//向名称为words的文本框内填入"嘻嘻嘻",并点击名称为"submit"的按钮
end;
 
点击网页上面的找到的第一个按键
// Click Button as enter value Caption
function PageSubmit(wb: TWebBrowser): Boolean;
var
spDisp: IDispatch;
elements: IHTMLElementCollection;
btn: IHTMLFormElement;
i: Integer;
begin
Result := false;
repeat
elements := GetHTMLElements(wb);
DoSleep();
until (elements <> nil);

for i := 0 to elements.Length - 1 do
begin
spDisp := elements.item(i, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLFormElement, btn)) then
begin
btn.submit;
Result := True;
Break;
end;
end;
end;

// 到Cisco网站填写CCIE考试认证资料,通过Input Element的name来填写value
function AutoPage(wb: TWebBrowser): Boolean;
var
spDisp: IDispatch;
elements: IHTMLElementCollection;
edt: IHTMLInputElement;
btn: IHTMLFormElement;
i: Integer;
begin
Result := false;
elements := GetHTMLElements(wb);
for i := 0 to elements.Length - 1 do
begin
spDisp := elements.item(i, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement, edt))then
begin
if (edt.name = 'testID') then
edt.Value := 'sp2580656'
else if (edt.name = 'testDate') then
edt.Value := '7/13/2001'
else if (edt.name = 'testScore') then
edt.Value := '78';
end;
end;
// Click button
Result := PageSubmit(wb, 'Submit Query');
end;
 
如果该页面是固定的,用TNMHTTP控建直接向远方提交你用程序生成的数据
如果你想做一个通用的软件,可以用楼上各位的方法,也可以分析用TNMHTTP控件
取回的页面原码,找到输入框的名称和提交表单的URL,在合成提交数据发送到取回的URL
 
多谢各位,正测试中,通过后马上散分!
 
To:lqy
IShellWindows
IDispatch
IWebBrowser2
IHTMLDocument2
IHTMLInputElement这些都是什么东东?
哪里可以找到啊?
 
这些都是COM的接口类型
shdvm单元
 
ok,搞定
uses SHDocVw, mshtml;
既可
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
回复
0
查看
476
爱音乐的孩子是小白
后退
顶部