
相信很多朋友都有过这样的想法,一些单调的表单提交工作,能不能有一些简单方便的方法来完成这些重复的劳动。
比如说,注册用户啦,网站添加文章啦。。。
呵呵,现在小弟做了一个自动提交程序,说是自动,其实也不算啦,只能算半自动。
主要是用Webbrowser控件来完成,所以说速度上比不上HTML的IDHTTP来得快。多线程也没有使用到,因为用webbrowser线程好象没能
发挥太大的作用,webbrowser在线程运用中也很容易假死。。。
1、获取webbrowser自动提交表单的ID和索引。
下面介绍一下程序的使用方法以及它的源码及分析。
第一步 首先在输入要提交的网页地址。
例如:
我们输入:www.baidu.com

点击分析网页,然后就可以把网页的INPUT标签都列出来了。
可以看到ID为Wd的表单就是百度的输入框了。‘百度一下’这个提交按钮并没有ID类型是submit。
怎么提取这些表单呢:
这里先说一下MSHTML
ITEM是MSHTML里一个集合。
网页DOCUMENT对象所有过元素都在这里。可以通过遍历它来得到某个标签的内容。
例如:object.item(0)得到第一个元素。
代码分析:
1 | var |
2 | myitem:Olevariant; |
1 | myitem:=webbrowser1.Document; |
01 | for i := 0 to myitem.all.length - 1 do //遍历所有元素 |
02 | begin |
03 | if myitem.all.item(i).tagName = 'INPUT' then //表单一为INPUT标签,还有很多,可以换上'BUTTON','TEXTAREA',SELECT下拉选择等。。。 |
04 | if myitem.all.item(i).type <> 'hidden' then //有些是隐藏不可操作,所以就把这些挑去。 |
05 | begin |
06 | |
07 | stringgrid1.Cells[0,j]:=inttostr(j); |
08 | stringgrid1.Cells[1,j]:=inttostr(i); //表单的索引号,即表单在集合中的第几个位置。 |
09 | stringgrid1.Cells[2,j]:=myitem.all.item(i).tagName; |
10 | stringgrid1.Cells[3,j]:=myitem.all.item(i).type; |
11 | stringgrid1.Cells[4,j]:=myitem.all.item(i).name; //表单的ID |
12 | stringgrid1.rowcount:=stringgrid1.rowcount+1; |
13 | |
14 | j:=j+1; |
15 | end; |
1 | end; |
1 |
1 | 在遍历for i := 0 to myitem.all.length - 1 do 的时候首先要保证webbrowser是有内容的,否则出错。 |
1 | 可以加一句判断:if form1.webbrowser1.Document = nil then exit; |
1 | 好了,这就得到表单的索引和ID啦。。。怎么自动提交呢? |
1 | 按下来的话题就是提交了。。。呵呵 |
1 |
本文介绍如何使用Delphi7中的Webbrowser控件自动提交网页表单,包括获取表单ID、索引和提交过程的详细步骤。
257





