jingygr 发表于 2012-7-6 11:53:36

[已解决]请问一下_IELinkClickByText是不是只能点击完全匹配的链接文字?

本帖最后由 jingygr 于 2012-7-9 12:54 编辑

请问一下_IELinkClickByText是不是只能点击完全匹配的链接文字?

如果只知道链接文字的部分文字,怎么办?

如整个标题是:我要点击链接啦
但我只知道:点击链接


解决的方法是:先遍历文档中的链接,找到自己想要的链接地址的innertext,然后回过头来点击,如下:$oLinks = _IELinkGetCollection($oIE)
                For $oLink In $oLinks
                        If StringInStr($oLink.href, IniRead(@ScriptDir & "\config.ini", "baidu", "webUrl", "")) Then
                                _IELinkClickByText($oIE, $oLink.innertext)
                        EndIf
                Next

user3000 发表于 2012-7-6 12:29:07

回复 1# jingygr

楼主的学习态度不可取,这问题可以自己动手实验证明的.

必须完全匹配. 否则将提示:
"IE.au3 V2.4-0 Warning from function _IELinkClickByText, $_IEStatus_NoMatch"#include <ie.au3>
$oie = _IECreate('www.baidu.com', 0, 1, 0)
Sleep(1000)
_IELinkClickByText($oie, 'About Baid', 0) ; 'About Baidu' 正常

jingygr 发表于 2012-7-6 12:36:23

回复 2# user3000


    我知道这个不能模糊匹配,我想问一下,有没有模糊匹配的方法

user3000 发表于 2012-7-6 13:19:58

本帖最后由 user3000 于 2012-7-6 13:22 编辑

回复 3# jingygr

    好吧, 当作我没看见1楼里的那句话: 请问一下 _IELinkClickByText是不是只能点击完全匹配的链接文字?

想模糊匹配? 找另外的出路吧. 比如:
#include <ie.au3>
$oie = _IECreate('www.baidu.com', 0, 1, 0)
Sleep(1000)
$html = _IEdocReadHTML($oie)
$text = StringRegExp($html, '(?i)>(About.*?)</a>', 3)
If Not @error Then _IELinkClickByText($oie, $text, 0)

但越模糊越不可靠, 如果非要这样做, 还不如直接匹配出相关链接了.

骗子 发表于 2012-7-8 17:50:27


Func _IELinkClickByText(ByRef $o_object, $s_linkText, $i_index = 0, $f_wait = 1)
        If Not IsObj($o_object) Then
                __IEErrorNotify("Error", "_IELinkClickByText", "$_IEStatus_InvalidDataType")
                Return SetError($_IEStatus_InvalidDataType, 1, 0)
        EndIf
        ;
        Local $found = 0, $linktext, $links = $o_object.document.links
        $i_index = Number($i_index)
        For $link In $links
                $linktext = $link.outerText & "" ; Append empty string to prevent problem with no outerText (image) links
;~                 If $linktext = $s_linkText Then ;原来是=,好像必须完全匹配
                If StringInStr ($linktext,$s_linkText) Then;我改成包含了,但是没验证能不能成功
                        If ($found = $i_index) Then
                                $link.click
                                If $f_wait Then
                                        _IELoadWait($o_object)
                                        Return SetError(@error, 0, -1)
                                EndIf
                                Return SetError($_IEStatus_Success, 0, -1)
                        EndIf
                        $found = $found + 1
                EndIf
        Next
        __IEErrorNotify("Warning", "_IELinkClickByText", "$_IEStatus_NoMatch")
        Return SetError($_IEStatus_NoMatch, 0, 0) ; Could be caused by parameter 2, 3 or both
EndFunc   ;==>_IELinkClickByText

瞎改的,不知道能不能行

ak47gglllk 发表于 2013-12-6 14:03:39

谢谢,都研究一下。找了好久的这个东西

deliy 发表于 2013-12-23 21:49:00

这个帖子好

ioripalm 发表于 2014-1-26 16:00:42

回复 1# jingygr


    $oLinks = _IELinkGetCollection($oIE)
$sMyString = "部分文字"
For $oLink In $oLinks
        $sLinkText = _IEPropertyGet($oLink, "innerText")
        If StringInStr($sLinkText, $sMyString) Then
                _IELinkClickByText($oIE, $oLink.innertext)
                ExitLoop
        EndIf
Next
页: [1]
查看完整版本: [已解决]请问一下_IELinkClickByText是不是只能点击完全匹配的链接文字?