再次300分求救!!!怎样模拟鼠标不断点击网页上的某个按钮如“提交”,使之不断向服务器提交数据(300分)

  • 主题发起人 主题发起人 LVGEFENG
  • 开始时间 开始时间
L

LVGEFENG

Unregistered / Unconfirmed
GUEST, unregistred user!
上次听了whaoye的:
form action=http://www.xxxxxxx.com/search method=get name=f>
<input type=text value="" framewidth=4 name=q size=55 maxlength=256>
<input name=btnG type=submit value="搜索">
</form>
然后你就可以用nmhttp控件来提交就相当于点按纽了。
nmhttp1.get('http://www.xxxxxxx.com/search?q=美女');
就可以了,如果不要结果,就用
nmhttp1.head('http://www.xxxxxxx.com/search?q=美女');
小弟悟性较低,没有成功,现在再次求救,那个网页的html源代码如下:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="css.css">
<title></title>
<base target="main">
</head>

<body link="#0000FF" vlink="#000000" alink="#000000">

<p></p>

<form method="POST" action="http://61.137.93.64/mop/new/item/useitem.asp" target="main">
<table border="1" width="70%">
<tr>
<td width="10%" bgcolor="#DBD7C8" nowrap> </td>
<td width="40%" bgcolor="#DBD7C8" nowrap><div align="center"><center><p>名 称 </td>
<td width="20%" bgcolor="#DBD7C8" nowrap align="center"><div align="center"><center><p>数
量 </td>
</tr>
<tr><td width='10%'><input type='radio' name='R1' value='名表OMEGA'></td><td width='70%'>名表OMEGA</td><td width='34%'>13515</td></tr><tr><td width='10%'><input type='radio' name='R1' value='魔界通行证'></td><td width='70%'>魔界通行证</td><td width='34%'></td></tr> </table><p><input type='submit' value='使用' name='B1'> <input type='submit' value='转让' name='B1'></p>
</table>
</form>

<p align="center"></p>
</body>
</html>
运行后如果radio选名表OMEGA,然后点使用,我就是要模拟这个事件向服务器提交请求。请给出实现源代码
如果300分不够再加,多谢了!!
 
这个网页是用post方法递交表单,用get是不行的
用nmhttp控件进行post的代码如下,调不通不要问我,我也没试过:-)

NMHTTP的POST用法:

NMHTTP1.InputFileMode:=False;
NMHTTP1.OutputFileMode:=True;
NMHTTP1.ReportLevel:=Status_Basic;
If ifuseproxy.Checked then
Begin
NMHTTP1.Proxy := Edit1.Text;
NMHTTP1.ProxyPort := StrToInt(Edit2.Text);
End;
With NMHTTP1.HeaderInfo do
Begin
Cookie := Edit5.Text;
LocalMailAddress := Edit6.Text;
LocalProgram := Edit7.Text;
Referer := Edit8.Text;
UserID := Edit9.Text;
Password := Edit10.Text;
End;


// 把要提交的数据先放在test.txt文件中:格式为stnid=A&pageno=123456....

NMHTTP1.Post('http://www.wocall.com/script/zbwebcall.asp','test.txt');

file://NMHTTP的具体用法在Delphi安装目前/Borland/Delphi5/Demos/FastNet/Http
下有个NMHTTP使用的例子。

 
用TClientSocket啦,NMHTTP简直就是垃圾!
 
用INDY的TIDHTTP可以方便的POST,NMHTTP没有试过,因为据说功能不强,根本就不用。不过我在做这方面的尝试的时候,在某些页面遇到了问题
另外想问

不能POST的情况如下 ,而且据一网友说大的页面也是不能POST的(本程序使用了代理服务器)
挑选了http://disc.server.com/Indices/165671.html进行测试,此页面有指定:
FORM METHOD="POST" ENCTYPE="application/x-www-form-urlencoded,不知为何IDHTTP不能做POST动作而且发到如果直接用 http://disc.server.com/discussion.cgi?id=165671&author=test&email=fd@ds.s&subject=test&message=stest这种语句也不能将发言POST上,但没有指定FORM METHOD="POST" ENCTYPE="application/x-www-form-urlencoded的页上可以POST上,请问有无先进有这方面的经验
程序如下:
procedure TForm1.Button2Click(Sender: TObject);
var
aStream: TStringStream;
Params: TStrings;
begin
idhttp1.Request.ProxyServer:='63.121.155.253';
idhttp1.Request.ProxyPort :=8080;
aStream:=TStringStream.Create('');
Params := TStringlist.create;
params.Add('id=165671&author=test&email=fd@ds.s&subject=test&message=stest');

IdHTTP1.Request.ContentType:= 'application/x-www-form-urlencoded';
try
//idhttp1.Connect ;
idhttp1.Post('http://disc.server.com/discussion.cgi',params,astream);

except
on E: Exception do
showmessage('Error encountered during POST: ' + E.Message);
end;
memo1.lines.Text:=aStream.DataString ;
aStream.Destroy ;
params.Free;

end;
 
忘记说自己的问题了,呵呵,我不清楚用TSOCKET如何设置代理服务器?

刚加入才255大圆,我出100大圆,呵呵
 
procedure TForm1.btnSubmitClick(Sender: TObject);

var

EncodedDataString: string;

PostData: OleVariant;

Headers: OleVariant;

I: Integer;

begin

// First

create a URL encoded string of the data

EncodedDataString := 'FName=' + HTTPEncode(edtFirstName.Text) + '&' +

'Flavor=' + HttpEncode(cmbxFlavor.Text);

// The PostData OleVariant needs to be an array of bytes as large

// as the string (minus the NULL terminator)

PostData := VarArrayCreate([0

Length(EncodedDataString) - 1]

varByte);

// Now

move the Ordinal value of the character into the PostData array

for I := 1 to Length(EncodedDataString) do

PostData[I-1] := Ord(EncodedDataString);

Headers := 'Content-Type: application/x-www-form-urlencoded' + #10#13;

// Finally

we just Navigate to the URL. Note that you may have to modify

// the path to your ASP page's location.

WebBrowser1.Navigate('http://localhost/scripts/navpost.asp'

EmptyParam


EmptyParam

PostData

Headers);

end;
 
这些代码里老有错误,小弟总是调试不出,有没有人可以修后,贴出来?最好是已经经过试验的代码
 
利用Delphi的Olevariant类型

单个frames的输入

var
o : Olevariant;
begin
o := WebBrowser.OleObject.document.all.item('LoginUserID',0); //找到登录用户名的输入框
o.value := 'TEST';
o := WebBrowser.oleobject.document.all.item('LoginPassword',0); //找到登录密码的输入框
o.value := 'TEST'
WebBrowser.oleobject.document.Forms.Item(0, 0).submit; //第一个表单提交

{

o :=WebBrowser.oleobject.document.all.item('Login',0); //或者用指定表单名称提交
o.Click; //点击操作,对其它对象也可同样操作
}
end;


 

多个frames的输入,FrameIndex为Frame的序号

 

var
o : Olevariant;
begin

//找到登录用户名的输入框
o := WebBrowser.oleobject.document.documentelement.document.frames.item(FrameIndex).document.all.item('LoginUserID',0);
o.value := 'TEST';

//找到登录密码的输入框
o := WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.all.item('LoginPassword',0);
o.value := 'TEST'

//第一个表单提交
WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex).document.Forms.Item(0, 0).submit;

{

//或者用指定表单名称提交

o :=WebBrowser.oleobject.document.documentelement.document.frames.item(FramIndex)..document.all.item('Login',0);
o.Click; //点击操作,对其它对象也可同样操作
}
end;


 
 
请教一下,为什么我编译的时候出现:
[Error] webbrowserpost.pas(56): Object or class type required
错误
出错行是:
o := WebBrowser.oleobject.document.documentelement.document.frames.item(FrameIndex).document.all.item('LoginUserID',0);
我是照抄程序的,但是为什么会有这种提示?
程序为:
var
o : Olevariant;
begin
webbrowser1.Navigate('D:/WINDOWS/Desktop/1.htm') ;
o := WebBrowser.OleObject.document.all.item('test',0); //找到登录用户名的输入框
o.value := 'TEST';
end;

1.htm里有个表单,里面有TEXT框,名字是test
 
呵呵!这可是挣钱的好方法!
不过,就其技术的角度来看,还是不错的!
 
其实不用把URL和参数分割开来应用,请求参数可以直接放在URL里面,然后去用NMHttp
的Get方法发请求,GetURL就是请求串如:http://www.delphibbs.com/delphibbs/
dispq.asp?lid=595151,就是这样了,我已经可以分析036的列车信息了:)
 
何必那么麻烦?用javascript几行代码就搞定了。

function autoSubmit(page)
{
document.form2.action= page;
document.form2.submit();
}
form2是表单的名字。
page是你要提交表单的文件名+参数,比如:'http://www.xxxxxxx.com/search?q=美女'
然后在按钮的onclick事件中调用这个函数:
<input type='radio' name='R1' value='魔界通行证' onclick="autoSubmit('http://www.xxxxxxx.com/search?q=美女')">
就行了。如果要提交多次就用循环吧。
 
to honestman,

我在用你的这段代码的时候,编译没有问题,但是在执行EXE的时候提示
停用“调用取消”,不知道是怎么回师。
 
上面的代码我也总是和smileff8一样调试不过,请大虾帮帮忙,写清楚点好吗?
 
后退
顶部