您的位置:程序门 -> vb -> 网络编程



vb中自动填写表单webbrowser的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb中自动填写表单webbrowser的问题[已结贴,结贴人:msn2005]
发表于:2007-05-17 07:31:40 楼主
相关网页代码:
用户名: <input   name= 'username '   type= 'text '   id= 'username '>
密&nbsp;&nbsp;码: <input   name= 'userpassword '   type= 'password '   id= 'password '>
验证码: </td> <td   height= '25 '> <input   name= 'checkcode '   type= 'text '   id= 'checkcode '   size= '6 '   maxlength= '6 '> <a   href= 'javascript:refreshimg() '   title= '看不清楚,换个图片 '> <img   id= 'checkcode '   src= 'inc/checkcode.asp '   style= 'border:   1px   solid   #ffffff '> </a> </td>
<input   name= 'login '   type= 'submit '   id= 'login '   value= '   登   录   '>

<script   language=javascript>
      function   refreshimg(){document.all.checkcode.src= 'inc/checkcode.asp ';}
      function   checkloginform(){
              if(document.userlogin.username.value== ' '){
                      alert( '请输入用户名! ');
                      document.userlogin.username.focus();
                      return   false;
              }
              if(document.userlogin.password.value   ==   ' '){
                      alert( '请输入密码! ');
                      document.userlogin.password.focus();
                      return   false;
              }
              if(document.userlogin.checkcode.value   ==   ' '){
                      alert( '请输入验证码! ');
                      document.userlogin.checkcode.focus();
                      return   false;
              }
      }
</script>


我的vb代码:
private   sub   kxedu_documentcomplete(byval   pdisp   as   object,   url   as   variant)
        web.document.forms(0).userlogin.username.value   =   "msn2005 "
        web.document.forms(0).userlogin.password.value   =   "724864 "
        web.document.forms(0).userlogin.checkcode.value=???
        web.document.forms(0).login.click
end   sub
我这种方法简直没用,后来参考其它资料,改为如下:
  dim   vdoc,   vtag
        dim   i   as   integer
        dim   h   as   integer
        set   vdoc   =   kxedu.document
        for   i   =   0   to   vdoc.all.length   -   1
                set   vtag   =   vdoc.all(i)
                select   case   vtag.tagname
                case   "input "
                        select   case   vtag.name
                        case   "username "
                                vtag.value   =   "msn2005 "
                        case   "password "
                                vtag.value   =   "123456 "
                        end   select
                end   select
        next   i
仍然无法填写用户名和密码,更别说验证码和登录了。不知如何办才行?
发表于:2007-05-17 08:12:181楼 得分:0
这样应该是可以的吧
发表于:2007-05-17 14:21:042楼 得分:0
不行啊,如果行的话我不会拿出来提问了啊。
发表于:2007-05-21 05:51:023楼 得分:0
怎么没人回呢?自己顶上。
发表于:2007-05-28 06:42:034楼 得分:0
再顶一次了。
发表于:2007-05-28 09:40:555楼 得分:0
document.form(i).sumbit
发表于:2007-05-29 11:11:526楼 得分:0
楼上的,什么意思啊?能否说详细点呢?
发表于:2007-05-29 16:10:197楼 得分:0
楼上的说你没提交

name是分大小写的,你再试试
发表于:2007-05-30 13:40:228楼 得分:0
哦,我也明白他的意思,但那不是关键;name大小写我都试过了,也无效。
发表于:2007-05-30 22:05:309楼 得分:0
顶到问题解决为止!
发表于:2007-05-31 20:27:0110楼 得分:0
鍙堟矇涓嬪幓浜
发表于:2007-06-01 11:50:3911楼 得分:2
真是个直心眼的兄弟呀……
你再前面加个lcase()或者ucase()不行吗……
另外密码的name是userpassword好不好……
for   i   =   0   to   vdoc.all.length   -   1
                set   vtag   =   vdoc.all(i)
                select   case   lcase(vtag.tagname)
                case   "input "
                        select   case   lcase(vtag.name)
                        case   "username "
                                vtag.value   =   "msn2005 "
                        case   "userpassword "
                                vtag.value   =   "123456 "
                        end   select
                end   select
        next   i
发表于:2007-06-01 15:56:1612楼 得分:8
dim   vdoc,   vtag
        dim   i   as   integer
        dim   h   as   integer
        set   vdoc   =   kxedu.document
        for   i   =   0   to   vdoc.all.length   -   1
       
      if   ucase(vdoc.all(i).tagname)   =   "input "   then    
                        set   vtag   =   vdoc.all(i)
                        select   case   vtag.name
                        case   "username "
                                vtag.value   =   "msn2005 "
                        case   "userpassword "
                                vtag.value   =   "123456 "
                        end   select
        next   i
发表于:2007-06-01 15:57:3813楼 得分:0
上面最后忘了end   if


        dim   vdoc,   vtag
        dim   i   as   integer
        dim   h   as   integer
        set   vdoc   =   kxedu.document
        for   i   =   0   to   vdoc.all.length   -   1
       
      if   ucase(vdoc.all(i).tagname)   =   "input "   then    
                        set   vtag   =   vdoc.all(i)
                        select   case   vtag.name
                        case   "username "
                                vtag.value   =   "msn2005 "
                        case   "userpassword "
                                vtag.value   =   "123456 "
                        end   select
        next   i
end   if

发表于:2007-06-03 20:44:4814楼 得分:0
首先感谢nationalsix(相思子)和coffee54676()(虽然end   if   放在了next   i后边)两位的回帖,但两位的代码运行后均提示为:
object   doesn 't   support   this   property   or   method   (error   438)

我在msdn里看了下,没大看懂(因为是英文的)。还希望两位继续热心帮助解决!
发表于:2007-06-03 20:50:3615楼 得分:0
不好意思,上面的回复错了,由于我原来的代码未删,才会导致上面的错误。
经检查后重新运行,准确的讲,前面两位的代码运行都很正常,就是网页打开完毕后无任何征兆,或者说程序未起任何作用!为什么呢?
发表于:2007-06-03 23:51:5116楼 得分:2
因为上面的程序没有输入正确的验证码,所以最后一步提交是没   用的,固没有任何提示,最近我也是在搞类似的程序,验证码问题还没解决啊,也希望各为高手们再想想,我觉得这个随机的验证码好象是程序输不了的,而要人手啊,所以只要完成输入用户名和密码,验证码还要人手根据实际输入,这样程序才能完成登陆啊
发表于:2007-06-04 08:49:1817楼 得分:0
验证码就是做来防止你自动登陆的
发表于:2007-06-04 11:39:2918楼 得分:0
我做过yahoo邮箱和ebay自动注册器,都是填好text,和selected下拉菜单以后,webbrowser自动滚动到验证码输入框,同时输入框取得焦点,手填后回车,也还满快的~

csdn上有个牛人的blog上有如何编写   csdn验证码自动填写的程序   的文章,记不清网址了,搜搜看~
发表于:2007-06-04 11:51:5919楼 得分:0
找到了,http://blog.csdn.net/qqwwee_com/category/146600.aspx
发表于:2007-06-04 14:44:0320楼 得分:0
这个问题主要难点就是验证码怎么处理。
如果针对性比较强,网站验证码简单,完全可以做一个验证码自动识别功能。

识别后自动填表。
发表于:2007-06-04 16:07:5521楼 得分:0
哇,半天没来,居然这么多热心的大哥。我的疑问是:既然验证码没解决,那至少前面的用户名和密码输入框应该填好了啊!可事实上未填。是不是查找输入框没起作用啊。coffee54676()   搜索的相关内容也蛮丰富吧,我先去看看能不能看懂啊!还不忙结帖吧。
发表于:2007-06-04 17:30:4422楼 得分:8
web.document.forms(0).login.click

===============
对提交按钮,不用click方法,用submit
或先要让提交按钮获得焦点,如

web.document.forms(0).login.setfocus
web.document.forms(0).login.click

发表于:2007-06-04 17:31:2923楼 得分:0
sorry,是
web.document.forms(0).login.focus
web.document.forms(0).login.click

发表于:2007-06-04 17:38:5024楼 得分:0
private   sub   kxedu_documentcomplete(byval   pdisp   as   object,   url   as   variant)
        web.document.forms(0).userlogin.username.value   =   "msn2005 "
        web.document.forms(0).userlogin.password.value   =   "724864 "
        web.document.forms(0).userlogin.checkcode.value=???
        web.document.forms(0).login.click
end   sub
web是不是应改为kxedu   ?
forms(0)是不是就是你要填写的表单?你试试直接用form的名
submit时,你可以直接用   form(0).submit
发表于:2007-06-04 18:13:0925楼 得分:0
感谢zzyong00(阿勇)的回复,我在代码中是用的kxedu而非上边的web,另外,如何判断哪张表单就是我所需要填写的表单?我只能从网页上查看相关源代码,所以“直接用form的名”我不知道怎么办,那么最后的form(0).submit也就没办法提交了,因为好像连哪张表单都没法确定。但前面有人说是因为验证码的问题,不知何故。
发表于:2007-06-05 00:36:3926楼 得分:0
再顶一次!
发表于:2007-06-05 08:18:0227楼 得分:0
“直接用form的名”:在网页代码中有类似
<form   name=xxxx   action=...> <input   .....>         </form>
其中xxxx就是form的名,你可以用它代替form(0)
验证码肯定是个大问题!你先解决没有验证码的表单吧。
我感觉你应先学学html标记语言
发表于:2007-06-05 10:40:4328楼 得分:0
<form   action= '/user/user_chklogin.asp '   method= 'post '   name= 'userlogin '   onsubmit= 'return   checkloginform(); '   target= '_top '> form名就是userlogin,这个办法早试过了,不行的!
发表于:2007-06-05 19:12:5329楼 得分:0
呵呵,在我這裏試可是沒有問題,我用的是sina主頁上登錄郵箱的哪個簡單的表單
发表于:2007-06-05 21:32:2730楼 得分:0
zzyong00(阿勇),能加个qq吗?我想你能不能亲自指导一下?我的qq是27100720
发表于:2007-06-05 22:03:4531楼 得分:0
是不是窗口有框架?
发表于:2007-06-06 10:21:4832楼 得分:0
窗口有框架?
有框架跟无框架的区别在哪?
依我观察,目前这个网页是有的。
以前的一些简单登陆的确实没有,所以很多方法都能自动填写。
那如何解决?
发表于:2007-06-06 11:17:0533楼 得分:0
up
发表于:2007-06-08 09:26:0934楼 得分:0
up
发表于:2007-06-10 13:11:0735楼 得分:0
问题还没有解决?我的qq:40401780
发表于:2007-06-10 22:26:3736楼 得分:0
ok,加了。
发表于:2007-06-13 08:45:2337楼 得分:0
似乎框架两边的网页指向链接是不同的
发表于:2007-06-13 09:19:2438楼 得分:0
验证码是无法解决的!
发表于:2007-06-13 13:50:5739楼 得分:0
用web.document.getelementbyid( "xxxx ").value= "asdf "
发表于:2007-06-17 16:57:3140楼 得分:0
to   fyming(努力不一定成功,放弃一定失败):验证码为什么说是无法解决的呢?
to   talentli(▁▂▃▄▅   天才的我   ▆▅▄▃▂▁)   :getelementbyid什么意思?

另:通过后台登陆页面login.asp登陆即可绕过框架即可,但验证码确实没法解决.
发表于:2007-06-18 18:13:4541楼 得分:0
呵呵,大哥,还没有结贴?
发表于:2007-06-21 14:46:1542楼 得分:0
验证码的问题看来确实没法解决了,好吧,结帖!
发表于:2007-06-29 13:09:2343楼 得分:0
'dim   shu   as   integer
                'shu   =   1
                'do   while   brow.document.all.item(shu).name   <>   "passwd "
                '   shu   =   shu   +   1
                'loop
                '   messagebox.show(brow.document.all.item(shu).name)
                'messagebox.show(shu)
                brow.document.all.item(40).innertext   =   "帐号 "

                brow.document.all.item(47).innertext   =   "密码 "


快速检索

最新资讯
热门点击