本帖最后由 chengxuayuan 于 2011-02-18 13:44:45 编辑

解决方案 »

  1.   

    遍历整个页面的button数量 看这是第几个button 用 Document.button(n).Click
      

  2.   

    法一:
    getElementsByTagName("button")(0),如果页面只有一个button标签那么直接用0,否则的话自己分析看是第几个法二:
    getElementsByClassName("pn vm")(0),分析同上。firefox平台才有这个方法法三:
    这样的一般都放在表单里面的,表单一般都有id或者name的,直接用 表单.submit即可。法四:
    遍历所有的标签,用if x.type以及x.classname判断是否是你需要的。
      

  3.   

    这样的?那是不是要用webbrowser才能遍历的? 我现在用的是ie对象:
    Set ie = CreateObject("InternetExplorer.Application")
    然后用的ie.Document.getElementById方法.
    直接用ie.document.button(n).click不可以的吧?我原先本来就试了下webbrowser中的方法搬到 ie对象 直接用,试过是不行.提示"不支持该方法":
    --------------------------------
    Set ie = CreateObject("InternetExplorer.Application")
    Dim i As IntegerFor i = 0 To ie.All.length - 1  '检查所有标Set vTag = ie.All(i)'这里原来是WebBrowser1.Document.all,这是用另一种方法实现自动登录(见附后后),只是这种方法貌似没有getElementById的方法神速!于是我设想把两种方法结合起来---失败了!If vTag.Type = "submit" Then 
    vTag.Click
    End IfNext i
    ------------------------------另一种方法我指类似:
    Set vDoc = WebBrowser1.Document
    For i = 0 To vDoc.All.length - 1  '检查所有标签If UCase$(vDoc.All(i).tagName) = "INPUT" Then '如果找到INPUT标签
    Set vTag = vDoc.All(i)
    If vTag.Type = "text" And vTag.Name = "u" Then '找到网页代码里的type name
    vTag.Value = "123"
    End If
    If vTag.Type = "submit" Then '1.因为就一个提交按钮,2.因为没有Name 所以不用  - -!
    'vTag.Click
    End If
    End If
    Next i
    ---------------------
      

  4.   

    怎么就没有getElementByType呢?!
      

  5.   

    Document.button(n).Click
    基本是最简单的方法了 因为登录页面基本来说源代码都不会变,因此这个按钮的编号也不会变的
    如果源代码真变了的话 那任何一种方法都可能不再可靠 都还需要重新分析页面修改代码
      

  6.   

    不管这个元素,而是用Form的Submit方法直接提交.
      

  7.   

    再有个问题请教下楼上各位高手:如果页面有多个button标签的话,这个要自己分析是第几个("frame()" 和 "form()"也有这个问题).问下他这个序数是按流水来的吗?就是说html代码中,从上往下看下来,最先出现的那个就是0,然后第二个出现就是1,这样类推,是吗?还是按别的什么规则定的?我看了下,它html本身好像是不会标明的这种序数的感谢!!
      

  8.   

    你是在哪里看到document对标签有这样的访问方式的?只有几个特定标签提供了集合方式的访问方法,例如images、links、forms、frames等,跟原始的标签名也不尽相同。一般的标签要获得所有的集合的只有通过getElementsByTagName来获得。另外楼主的getElementByName写错了应该是getElementsByName,可以有很多标签是同一个name的,因为结果是一个集合,所以含s就很好理解了。而id是唯一的,不能有相同的值。
      

  9.   

    应该基本是和html代码中是一致的。浏览器解析的除了按顺序还能有其他什么凭据吗?对于展现在前台来说又是另外一码事,页面布局的话如果是用js+css处理的话就复杂多了。
      

  10.   

    看到你1楼写的表示怀疑,然后查了下手册,没有,实验了下buttons和button,以及开头字母大小还是小写都试了,结果都无效,有些东西不是想当然的。
      

  11.   

    我刚用 getElementByTagname(1) 已经成功了,就是不知道它这个序数是怎么排的?我看了下html代码中这个button是第1个出现的(第二个是个"搜索"button),可是我用getElementByTagname(0)失败了,用getElementByTagname(1)反倒成功了.这么看来,这个序数好像不是 按照在html代码中出现的先后顺序排的??
    谢谢!!
      

  12.   

    拜托写完整,是这个?getElementsByTagname("button")(0)
      

  13.   

    是,我老弄混,大侠一句 "可以有很多标签是同一个name的,因为结果是一个集合,所以含s就很好理解了。而id是唯一的,不能有相同的值。"这个彻底加深理解!如果有多个元素都是同一个name的话,getElementsByName是会取第一个?如果要定比如第二个的话就是像上面这样用序数了?比如getElementsByTagname("username")(1) 这样?
    谢谢!
      

  14.   

    确实没有集合表示<button>标签 是我想当然了,因为以前都是直接找的form 从没想要要找这个submit
    另外楼主你仔细搜索下 这个登录按钮确实是源代码中第二个出现的按钮 只不过第一个按钮用的拼写是input 第二个用的是button
      

  15.   

    这样的,晕死,我只搜索的 "button",看它是第一个出现的.原来input也叫按钮.
    谢谢!
      

  16.   

    是右上角那个嵌入的Google搜索按钮.
    另外讨教个技巧,大家有没有用chrome?用chrome审查元素的话,有没有什么办法把所有被折叠起来的内容都一次性自动展开的?我找了下没找到.
    谢谢!
      

  17.   

    WebBrowser1.Document.Forms(1).submit 
    你用这个吧 一般来说只要他的登录页面没有大的变化 这个语句都可以继续用
      

  18.   

    没用过谷歌浏览器。建议用firefox,上面有个插件叫firebug有你需要的功能,右击选择菜单“全部展开”即可。另外我提供的4种方法尽量选择定位准的。一般优先根据id其次name,再其次就是标签名称(+索引位置,稳定性差稍一变化就挂了),最后是所有标签遍历(费时费力)
      

  19.   

    好,不过我就是觉得好像getElement的方法登录比较神速呵. webbrowser的话又还要多画个webbrowser.大侠你头像上那个公仔好酷感谢!!
      

  20.   

    是,有同感,getElementById超级神速.
    索引位置没用过,不会.
    标签遍历比较麻烦,还要画个webbrowser
      

  21.   

    另外那种弹出窗方式的登录接口,有没有可能用frame(). .....登进的?
    有些弹出窗查看下元素好像会显示是个frame?
      

  22.   

    什么都有可能,不过div用的多。
      

  23.   

    晕,用在你取的ie对象里就改成ie.document.Forms(1).submit 
      

  24.   

    div是什么的缩写的?是哪个英文单词的?
    那是像getElementsByClassName("pn vm")(0)一样,是不是也有getElementsByDivName("xxxxx")(0)还是怎么呢?
      

  25.   

    div是标签,class只是一个属性。
    参考文章:
    http://blog.csdn.net/sysdzw/archive/2009/08/19/4463844.aspx能猜想联想是很好的,需要到手册查阅验证下,dhtml手册下载:
    http://download.csdn.net/source/1660838
      

  26.   

    想要玩转dom 可以在工程内添加引用Microsoft HTML Object Library
    创建对象Dim dom As HTMLDocument
    这样就能看到所有对象 方法和属性
      

  27.   

    这样的?我原先瞎试试了这个:
    For i = 0 To ie.All.length - 1 Set vTag = ie.All(i)'这里原来是WebBrowser1.Document.all,这是用另一种方法实现自动登录(见附后后),只是这种方法貌似没有getElementById的方法神速!于是我设想把两种方法结合起来---失败了!If vTag.Type = "submit" Then  
    vTag.Click
    End IfNext i
    --------------------
    提示我不能没有这种方法(也就是说ie.all(i)是不可以的?),我就以为ie.document.Forms(1).submit 这种也不能用的
      

  28.   

    ie.document.forms(0).submit差不多行了
      

  29.   

    For i = 0 To ie.document.all.length - 1 Set vTag = ie.document.all(i)'这里原来是WebBrowser1.Document.all,这是用另一种方法实现自动登录(见附后后),只是这种方法貌似没有 getElementById的方法神速!于是我设想把两种方法结合起来---失败了!
    If vTag.tagname="button" and vTag.Type = "submit" and vTag.classname="pn vm"Then  
    vTag.Click
    exit for
    End IfNext i
      

  30.   

    找到了,粗看了下,getElement好像只有getElementById   getElementsByname  getElementsByTagName三种?
    要好好学习下.谢谢!学习了,高手们今天教了我好多,占用你们时间了.非常感谢!!这里论坛里能不能追加分的?开贴的时候定的分不多.感谢高手们!我好像还有分的,想追加下.
      

  31.   

    是这里要精准定位, .click完了就退出循环 呵.
      

  32.   

    不知是莪倒霉还是迩们写错了、getElementsByTagName("button")(0)这句莪是执行不了的、
    莪用这句才能执行getElementsByTagName("button")[0]