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

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

  [复制链接]
发表于 2012-7-6 11:53:36 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 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' 正常
 楼主| 发表于 2012-7-6 12:36:23 | 显示全部楼层
回复 2# 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], 0)


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

评分

参与人数 1金钱 +10 收起 理由
jingygr + 10 谢谢兄弟

查看全部评分

发表于 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

瞎改的,不知道能不能行

评分

参与人数 1金钱 +10 收起 理由
jingygr + 10 谢谢兄弟

查看全部评分

发表于 2013-12-6 14:03:39 | 显示全部楼层
谢谢,都研究一下。找了好久的这个东西
发表于 2013-12-23 21:49:00 | 显示全部楼层
这个帖子好
发表于 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 02:51 , Processed in 0.085942 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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