相信很多朋友都有过这样的想法,一些单调的表单提交工作,能不能有一些简单方便的方法来完成这些重复的劳动。
比如说,注册用户啦,网站添加文章啦。。。
呵呵,现在小弟做了一个自动提交程序,说是自动,其实也不算啦,只能算半自动。
主要是用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 |