经常看到网络上面有网友问如何自动提交表单,比如:如何自动登录论坛,自动登录到邮箱等等。
今天,我介绍我使用的一种方法--使用WEBBROWER来提交。
原理:利用DELPHI自带的webbrower控件,显示页面,然后,获取对象docment,利用程序分析form架构,填写数据。
下面,我们就来做一个最简单的自动提交程序。
开发步骤:
step1:新建一个工程
step2:在窗体上放控件webbrower,放一个button按钮。
step3:在窗体的oncreate事件里面写如下代码: WebBrowser1.Navigate('你所要提交的页面地址');
step4:button1的onclick事件写出如下代码
var
myitem:Olevariant;
i:integer;
begin
myitem := WebBrowser1.Document;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'SELECT' then // 下拉框选择
begin
//myitem.all.item(i).value:='2'; // 从下拉框中选中第2项
end;
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='RADIO' then
begin
if myitem.all.item(i).value='NODE' then myitem.all.item(i).checked:=true; // 选中值
end;
if Uppercase(myitem.all.item(i).type)='TEXT' then
begin
if Uppercase(myitem.all.item(i).name)='USERNAME' then myitem.all.item(i).value:='lovefox';
if Uppercase(myitem.all.item(i).name)='SUBJECT' then myitem.all.item(i).value:='你的主题';
end;
if Uppercase(myitem.all.item(i).type)='PASSWORD' then
begin
if Uppercase(myitem.all.item(i).name)='PASSWORD' then myitem.all.item(i).value:='abcd123';
end;
if Uppercase(myitem.all.item(i).type)='SUBMIT' then
begin
if Uppercase(myitem.all.item(i).name)='TOPICSUBMIT' then myitem.all.item(i).click; // 点击提交键
end;
end;//Tagname = Input
if myitem.all.item(i).tagName = 'TEXTAREA' then // 多行文本
begin
if UpperCase(myitem.all.item(i).name)='MESSAGE' then myitem.all.item(i).value:='正文内容';
end;
end;//for i
end;
step5:编译运行。
说明:tagname属性指页面元素的类型,常见的有input、textarea、select、submit等,而像input又可以通过type(类型),来区别是什么样的元素,比如:单行文本text,密码password等最后,value属性就是对 指定的页面元素进行赋值。
掌握了这些,就可以灵活运用,比如用ini文件存储所要访问的页面地址以及所要提交的元素类型名称等,这样,通过配置,就可以访问不同的网站,完成诸如论坛自动发表文章,自动登录web邮件页面等等。
缺点:webbrwoer要先显示页面,才可以进行提交,速度上比较慢,对于只要提交数据而无需查看的,则显得不够简洁。另外,多个论坛同时提交某篇文章时,要登录多次几个不同的网站,也不够合理。希望,高手可以指点,如何使用socket的方法,来提交数据。最后,对于有附加码才能登录的页面,也显得力不从心。希望高手可以继续。