3370225 发表于 2014-4-24 23:03:22

这种IE按钮要怎么模拟点击

<button class="pn votedbutton" style="" name="pollsubmit" value="true" onclick="javascript:$('optionid').value='1468';" type="submit"></button>

damoo 发表于 2014-4-24 23:58:56

#include <IE.au3>
#include <IEQuery.au3>

$oItem = _IEQuery($oIE2, "BUTTON", "class=pn votedbutton")
_IEAction($oItem, "click")

3370225 发表于 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 + 1
Local $_Ele_Os[$n][$n] = [[$_EleStr]]
For $i = 1 To $_EleStr
;~   $tsp = StringSplit($_EleStr[$i],"=")
$tsp = StringRegExp($_EleStr[$i], '(.+?)="?([^"]+)"?, 3)
$_Ele_Os[$i] = $tsp
$_Ele_Os[$i] = $tsp
Next

Local $IE_array, $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
   Switch StringLower($_Ele_Os[$j])
    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]) 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 = $IE_add - 1
If $_Flag = False Then
   Return SetError(0, 0, $IE_array) ;成功返回元素对象数组
Else
   Return SetError(0, 0, $IE_array) ;只返回找到的第一个元素
EndIf
Else
Return SetError(1, 0, 0) ;失败返回0
EndIf
EndFunc   ;==>_IEQuery

damoo 发表于 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 中
                  $_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
        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 + 1
        Local $_Ele_Os[$n][$n] = [[$_EleStr]]
        For $i = 1 To $_EleStr
;~                 $tsp = StringSplit($_EleStr[$i],"=")
                $tsp = StringRegExp($_EleStr[$i], '(.+?)="?([^"]+)"?, 3)
                $_Ele_Os[$i] = $tsp
                $_Ele_Os[$i] = $tsp
        Next
       
        Local $IE_array, $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
                        Switch StringLower($_Ele_Os[$j])
                                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]) 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 = $IE_add - 1
                If $_Flag = False Then
                        Return SetError(0, 0, $IE_array) ;成功返回元素对象数组
                Else
                        Return SetError(0, 0, $IE_array) ;只返回找到的第一个元素
                EndIf
        Else
                Return SetError(1, 0, 0) ;失败返回0
        EndIf
EndFunc   ;==>_IEQuery

shqf 发表于 2014-4-25 12:34:36

有name的,咋不用呢?舍简求繁了吧。

3370225 发表于 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")

3370225 发表于 2014-4-25 15:58:32

汗呢,好像是论坛有问题。。粘贴上的IEQUERY就出错了。。本地运行是好的,不过还是无法点击

qsy666888 发表于 2014-4-26 11:11:15

粘贴上的IEQUERY就出错了
页: [1]
查看完整版本: 这种IE按钮要怎么模拟点击