操纵WebBrower提交表单的问题(200分)

  • 主题发起人 主题发起人 左轻侯
  • 开始时间 开始时间

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个html页面,其中有一个很大的form,里面是很多内容列表
每一条内容后面都有一个radio input
需要遍历这些内容,选择相应的radio input,然后提交整个form
关键是,通过什么接口可以遍历html的内容?又通过哪个接口
选择radio input?
dfw以前有过类似的讨论,但不是很详细
最近晕得厉害,不想再去翻资料了
谁能给出源码?200分归他
 
你可好好研究一下这个源码,像你这种高手一定看得懂的。
procedure TForm1.PutData;
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j,X: integer;
vi: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
iELC : IHTMLElementCollection ;
S,S2 : string;
HtmlInputEle : IHTMLInputElement;
HtmlSelEle : IHTMLSelectElement;
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

ielc:=idoc1.Get_all;

for j:=0 to ielc.length-1 do
begin
Application.ProcessMessages;
spDisp := ielc.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then
with HtmlInputEle do
begin
S2:=Type_;
S2:=UpperCase(S2);
//我把所有的input都填上 try , checkbox 都打勾
if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then
value :='try' //S:=S+#9+Value
else if StrComp(PChar(S2),'CHECKBOX')=0 then
begin
checked := True;
end;
end;
if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement ,HtmlSelEle))then
with HtmlSelEle, Memo1.Lines do
begin
S:=S+#9+IntToStr(selectedIndex+1); //这个是获取数据了
end;
end; //END FOR
Memo2.Lines.Add(S);
exit;
end;
end;
end;
end;
 
谢谢dana
我看了一下,大致思路是比较清楚了,但是信息还嫌不够
这个例子中操纵的是text和checkbox,我想操纵radio
哪位有更详细的资料?
我一直没有找到IE接口的具体SDK说明,到MS的站点上也没找着
分不够,可以再加
 
补充一下:
该html页面是含有frame的
 
具体你看一下这个,写得非常的清楚。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=528758
 
dana:
我也遇到了和你一样的问题,用这个:

if SUCCEEDED(spDisp.QueryInterface(IHTMLFormElement,FormEle))then
begin
FormEle.submit;
end;

只是刷新指定的action,并不提交
你是怎么解决的?
 
这个问题至今,我也未能理解,不过如中果你想做自动提交网页,
还是好好去研究一下登陆奇兵的工作原理,效果可能会好一些,
要是你知道这个如何做也顺便告诉我一声,我们可共同探讨。
mail:dana@shd.com.cn
QQ:81828019
 
我用
WebBrowser1.oleobject.document.Forms.Item(0,0).submit;
很简单地搞定了。
不知上面那种办法为什么不行,哪位知道我可以再给分
呵呵,这200分全给你了吧
 
但是我必须提醒你
不是所有的网站都可以用这句来处理,
因为网站的编写格式非常多种,
不信你可试试阿里巴巴的网站。
 
radio的话,好象可以直接给值,不管有多少个选项,好象只要给一个就行了....
如果是自动下载并找出输入框的话,建个数组,然后干掉同名的.....
如果是手工的话,那就自己删除吧....
 
后退
顶部