找回密码
 加入
搜索
查看: 4262|回复: 7

[IE类操作] 这种IE按钮要怎么模拟点击

  [复制链接]
发表于 2014-4-24 23:03:22 | 显示全部楼层 |阅读模式
<button class="pn votedbutton" style="" name="pollsubmit" value="true" onclick="javascript:$('optionid').value='1468';" type="submit"></button>
发表于 2014-4-24 23:58:56 | 显示全部楼层
#include <IE.au3>
#include <IEQuery.au3>

$oItem = _IEQuery($oIE2, "BUTTON", "class=pn votedbutton")
_IEAction($oItem, "click")
 楼主| 发表于 2014-4-25 05:30:33 | 显示全部楼层
本帖最后由 3370225 于 2014-4-25 05:32 编辑

好像无效,求大神赐教。
#include <IE.au3>
$oIE = _IECreate("http://bbs.tuniu.com/plugin.php?id=dzpoll&dzpollid=12&viewtype=voters")
$Ele = _IETagNameGetCollection($oIE,"INPUT",11)
$Ele.value="龙凤宝宝"
$Ele = _IEQuery($oIE,"BUTTON",'OuterText="搜索 "')
_IEAction($Ele,"click")
Sleep(3000)
$oItem = _IEQuery($oIE, "BUTTON", "class=pn votedbutton")
_IEAction($oItem, "click")


Func _IEQuery(ByRef $o_object, $_Eletag, $_Elepro, $_Flag = True) ;_IEQuery(IE对象,标签名,属性列表,标志)
 If Not IsObj($o_object) Then
  __IEErrorNotify("Error", "_IEPropertyGet", "$_IEStatus_InvalidDataType")
  Return SetError($_IEStatus_InvalidDataType, 1, 0)
 EndIf
 If Not __IEIsObjType($o_object, "browserdom") Then
  __IEErrorNotify("Error", "_IEPropertyGet", "$_IEStatus_InvalidObjectType")
  Return SetError($_IEStatus_InvalidObjectType, 1, 0)
 EndIf
 
 Local $_EleStr = StringSplit($_Elepro, ",")
 Local $n = $_EleStr[0] + 1
 Local $_Ele_Os[$n][$n] = [[$_EleStr[0]]]
 For $i = 1 To $_EleStr[0]
;~   $tsp = StringSplit($_EleStr[$i],"=")
  $tsp = StringRegExp($_EleStr[$i], '(.+?)="?([^"]+)"?, 3)
  $_Ele_Os[$i][0] = $tsp[0]
  $_Ele_Os[$i][1] = $tsp[1]
 Next
 
 Local $IE_array[1], $IE_add = 1
 ;开始查找元素对象
 Local $tmp_objs = _IETagNameGetCollection($o_object, $_Eletag)
 Local $IE_pertyGet = ""
 For $_tmp_obj In $tmp_objs
  For $j = 1 To $_Ele_Os[0][0]
   Switch StringLower($_Ele_Os[$j][0])
    Case "name"
     $IE_pertyGet = String($_tmp_obj.name)
    Case "id"
     $IE_pertyGet = String($_tmp_obj.id)
    Case "type"
     $IE_pertyGet = String($_tmp_obj.type)
    Case "value"
     $IE_pertyGet = String($_tmp_obj.value)
    Case "class"
     $IE_pertyGet = String($_tmp_obj.classname)
    Case "title"
     $IE_pertyGet = String($_tmp_obj.title)
    Case "outertext"
     $IE_pertyGet = String($_tmp_obj.outertext)
    Case "outerhtml"
     $IE_pertyGet = String($_tmp_obj.outerhtml)
    Case "innertext"
     $IE_pertyGet = String($_tmp_obj.innertext)
    Case "innerhtml"
     $IE_pertyGet = String($_tmp_obj.innerhtml)
    Case "href"
     $IE_pertyGet = String($_tmp_obj.href)
    Case "src"
     $IE_pertyGet = String($_tmp_obj.src)
    Case "alt"
     $IE_pertyGet = String($_tmp_obj.alt)
   EndSwitch
   
   If $IE_pertyGet <> String($_Ele_Os[$j][1]) Then
    ContinueLoop 2 ;不相等下一个元素
   EndIf
  Next
  $IE_add += 1
  ReDim $IE_array[$IE_add]
  $IE_array[$IE_add - 1] = $_tmp_obj
 Next
 If $IE_add > 1 Then
  $IE_array[0] = $IE_add - 1
  If $_Flag = False Then
   Return SetError(0, 0, $IE_array) ;成功返回元素对象数组
  Else
   Return SetError(0, 0, $IE_array[1]) ;只返回找到的第一个元素
  EndIf
 Else
  Return SetError(1, 0, 0) ;失败返回0
 EndIf
EndFunc   ;==>_IEQuery
发表于 2014-4-25 07:22:35 | 显示全部楼层
回复 3# 3370225
以下是风行者的IEJQuery.au3文件,
#cs==========================================================================
        ;作者: 风行者
        ;version 3.0
        
        通用获取元素对象
        #include <IE.au3>
        _IEQuery(ByRef $o_object,$_Eletag,$_Elepro)
        
        参数
        $o_object InternetExplorer.Application, 窗口, 框架或者任意DOM对象的对象变量
        $_Eletag  元素标签名
        $_Elepro  元素属性列表,以逗号为分隔符
        $_Flag  标志:true 只返回找到第一个元素,false 返回找到的元素数组
        
        返回值
        成功: $_Flag=false,返回元素对象数组,数组元素的数量储存在零号元素 $IE_array[0] 中
                  $_Flag=true ,返回找到第一个元素
        失败: 返回0 并且设置@ERROR
        @Error: 0 ($_IEStatus_Success) = 无错误
        1 = 没有找到元素对象
        3 ($_IEStatus_InvalidDataType) = 无效数据类型
        4 ($_IEStatus_InvalidObjectType) = 无效对象类型
        
        注意/说明
        属性列表支持属性:name,id,type,value,class,title,outertext,outerhtml
        innertext,innerhtml,href,src,alt
        
        属性值允许使用双引号括起,特别是href属性值存在“=”号的情况,必须用双引号括起
        有些href属性值最后可能存在反杠"/"的情况
        
        
        ;例子1
        #include <IE.au3>
        $oIE = _IE_Example("form")
        $oEles = _IEQuery($oIE,"input",'value=gameBasketball,type=checkbox',false) ;_IEQuery(IE对象,标签名,属性列表)
        $Ele = $oEles[1]
        MsgBox(0,"",$Ele.outerhtml)
        
        ;例子2
        #include <IE.au3>
        $oIE = _IE_Example("form")
        $oEle = _IEQuery($oIE,"input",'value=gameBasketball,type=checkbox') ;_IEQuery(IE对象,标签名,属性列表)
        MsgBox(0,"",$oEle.outerhtml)
#ce==========================================================================
        
Func _IEQuery(ByRef $o_object, $_Eletag, $_Elepro, $_Flag = True) ;_IEQuery(IE对象,标签名,属性列表,标志)
        If Not IsObj($o_object) Then
                __IEErrorNotify("Error", "_IEPropertyGet", "$_IEStatus_InvalidDataType")
                Return SetError($_IEStatus_InvalidDataType, 1, 0)
        EndIf
        If Not __IEIsObjType($o_object, "browserdom") Then
                __IEErrorNotify("Error", "_IEPropertyGet", "$_IEStatus_InvalidObjectType")
                Return SetError($_IEStatus_InvalidObjectType, 1, 0)
        EndIf
        
        Local $_EleStr = StringSplit($_Elepro, ",")
        Local $n = $_EleStr[0] + 1
        Local $_Ele_Os[$n][$n] = [[$_EleStr[0]]]
        For $i = 1 To $_EleStr[0]
;~                 $tsp = StringSplit($_EleStr[$i],"=")
                $tsp = StringRegExp($_EleStr[$i], '(.+?)="?([^"]+)"?, 3)
                $_Ele_Os[$i][0] = $tsp[0]
                $_Ele_Os[$i][1] = $tsp[1]
        Next
        
        Local $IE_array[1], $IE_add = 1
        ;开始查找元素对象
        Local $tmp_objs = _IETagNameGetCollection($o_object, $_Eletag)
        Local $IE_pertyGet = ""
        For $_tmp_obj In $tmp_objs
                For $j = 1 To $_Ele_Os[0][0]
                        Switch StringLower($_Ele_Os[$j][0])
                                Case "name"
                                        $IE_pertyGet = String($_tmp_obj.name)
                                Case "id"
                                        $IE_pertyGet = String($_tmp_obj.id)
                                Case "type"
                                        $IE_pertyGet = String($_tmp_obj.type)
                                Case "value"
                                        $IE_pertyGet = String($_tmp_obj.value)
                                Case "class"
                                        $IE_pertyGet = String($_tmp_obj.classname)
                                Case "title"
                                        $IE_pertyGet = String($_tmp_obj.title)
                                Case "outertext"
                                        $IE_pertyGet = String($_tmp_obj.outertext)
                                Case "outerhtml"
                                        $IE_pertyGet = String($_tmp_obj.outerhtml)
                                Case "innertext"
                                        $IE_pertyGet = String($_tmp_obj.innertext)
                                Case "innerhtml"
                                        $IE_pertyGet = String($_tmp_obj.innerhtml)
                                Case "href"
                                        $IE_pertyGet = String($_tmp_obj.href)
                                Case "src"
                                        $IE_pertyGet = String($_tmp_obj.src)
                                Case "alt"
                                        $IE_pertyGet = String($_tmp_obj.alt)
                        EndSwitch
                        
                        If $IE_pertyGet <> String($_Ele_Os[$j][1]) Then
                                ContinueLoop 2 ;不相等下一个元素
                        EndIf
                Next
                $IE_add += 1
                ReDim $IE_array[$IE_add]
                $IE_array[$IE_add - 1] = $_tmp_obj
        Next
        If $IE_add > 1 Then
                $IE_array[0] = $IE_add - 1
                If $_Flag = False Then
                        Return SetError(0, 0, $IE_array) ;成功返回元素对象数组
                Else
                        Return SetError(0, 0, $IE_array[1]) ;只返回找到的第一个元素
                EndIf
        Else
                Return SetError(1, 0, 0) ;失败返回0
        EndIf
EndFunc   ;==>_IEQuery
发表于 2014-4-25 12:34:36 | 显示全部楼层
有name的,咋不用呢?舍简求繁了吧。
 楼主| 发表于 2014-4-25 15:32:18 | 显示全部楼层
本帖最后由 3370225 于 2014-4-25 15:33 编辑

回复 4# damoo

你发的这个好像有错误,不过我去网上找到了IEQUEY.AU3,问题点击无效。试过用NAME的也不行,而且这个标签用风行者的网页快铺也抓不到。。,就是那个投票的标签
,前面的那段可搜索的可以点击到,但是后面那投票按钮无效
#include <IE.au3>
#include <IEQuery.au3>
$oIE = _IECreate("http://bbs.tuniu.com/plugin.php?id=dzpoll&dzpollid=12&viewtype=voters")
$Ele = _IETagNameGetCollection($oIE,"INPUT",11)
$Ele.value="龙凤宝宝"
$Ele = _IEQuery($oIE,"BUTTON",'OuterText="搜索 "')
_IEAction($Ele,"click")
Sleep(3000)
$oItem = _IEQuery($oIE, "BUTTON", "class=pn votedbutton")
_IEAction($oItem, "click")
 楼主| 发表于 2014-4-25 15:58:32 | 显示全部楼层
汗呢,好像是论坛有问题。。粘贴上的IEQUERY就出错了。。本地运行是好的,不过还是无法点击
发表于 2014-4-26 11:11:15 | 显示全部楼层
粘贴上的IEQUERY就出错了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-18 17:59 , Processed in 0.072184 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表