又是关于自动填写浏览器中的网页的问题???(50分)

  • 主题发起人 主题发起人 peacekeeper
  • 开始时间 开始时间
P

peacekeeper

Unregistered / Unconfirmed
GUEST, unregistred user!
  用TWebBrowser控件来进行自动填写网页,关于表格部分已经
有人问了。那么怎样自动运行网页上的JavaScript程序呢???怎
样自动点击网页上的按钮(并非用模拟鼠标事件的方法)呢???

 
模拟点击是可以的,找到SUBMIT按钮,CLICK就行了
可以试试下面的代码,没测试
VAR
TAROBJ:OLEVARIANT;
....
TarOBJ := WebBrowser1.OleObject.Document.Frames.Item(1).Document;
//这里没有考虑FRAME
for i := 0 to TarOBJ.All.Length - 1 do begin
if (TarOBJ.all.item(i).tagname = 'INPUT')and(TarOBJ.all.item(i).type='submit') then begin
TarOBJ.all.item(i).Click;
end;
end;
 
  如果要考虑FRAME呢???
 
检测一下就知道有没有frame了.
doc:=webbrowser1.document as IHTMLDocument2
if doc.frames.length <> 0 then
begin
for i:=1 to doc.frames.length -1 do
begin
framedoc:=doc.frames.item(i).document as IHTMLDOCUMENT2;
检测INPUT
end
end
DOCUMENT 有个SCRIPTS COLLECTIONS, 得到后用他的fireevent METHOD,
doc.scripts.item(i).fireevent(sEVENT)

 
如果网页上有两个INPUT,怎么知道应该运行哪个?
如果能够知道他的name就好了。
 
it has a name property.
Check MSDN, there are detail explaination
 
hllu:
  我把你的代码抄了上去,发现下面这句话有错:
framedoc:=doc.frames.item(i).document as IHTMLDOCUMENT2; *
[Error]main_form.pas(401):Types of actual and formal var parameters must be identical
[Error]main_form.pas(401):Operator not applicable to this operand type

我的源代码是:
procedure TmainForm.javarunClick(Sender: TObject);
var
doc,framedoc:IHTMLDocument2;
all:IHTMLElementCollection;
item,itemc:olevariant;
I:Integer;
begin
doc:=wb_main.document as IHTMLDocument2;
if doc.frames.length <> 0 then begin
for i:=1 to doc.frames.length -1 do begin
framedoc:=doc.frames.item(i).document as IHTMLDOCUMENT2;
showmessage(inttostr(i));
end;
end;
end;
(1)怎样改???
   ^^^^^^^^^^^^
如果去掉*的那一段代码,用一个下面的网页测试,结果发现showmessage只执行了一次。(2)为什么???
    ^^^^^^^^^^^^
(3)Frames.item(i)的顺序是否与Frame网页上指定的网页的顺序一样???
<Html>
<head>
<Title> Delphi </title>
<meta name="keywords" content="Delphi,inprise,borland,java">

<style type="text/css">
<!--
a:hover { font-family: ""; text-decoration: underline; color: #FF3300}
font { font-family: "宋体"; font-size: 9pt}
a { font-family: ""; text-decoration: none}
-->
</style>

</head>
<FRAMESET ROWS="100%" COLS="18%,*" BORDER=0>
<FRAME NAME="MenuFrame" SRC="./menu.htm" SCROLLING="AUTO">
<FRAME NAME="ContFrame" SRC="./Main.htm" SCROLLING="AUTO">
</FRAMESET>
<NOFRAMES>
如果你看到这一行方字,那么你的浏览器不支持FRAME.
</NOFRAMES>
</html>

另外,我查过MSDN中的IHTMLDocument2部分发现没有它的属性的介绍。
 
大件事,那段html代码看不见,其实结构根这里的是一样的,就是:把两个Html
页并在一起,一起显示而已。
<big>这些问题的分数加多100分。总分为150分。</big>
 
change framedoc to olevariant;
framedoc : olevariant ;
framedoc := doc.frames.item(i).document ;
 
还是不行。
只能用:
framedoc := WebBrowser1.OleObject.Document.Frames.Item(1).Document;
 
大虾们有没有完整的经过测试的源程序???
 
哈哈,我答关于 frame的部分。 噢,对不起,又是 peacekeeper 的问题
 
各位,我想问一下,程序怎么往input type="text"里填值?
是否:
doc:=wb_main.document as IHTMLDocument2;
doc.myform.item(i).value := "abc"
假设无frames,单页。
 
接受答案了.
 
后退
顶部