[已解决]请问一下_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 回复 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' 正常 回复 2# user3000
我知道这个不能模糊匹配,我想问一下,有没有模糊匹配的方法 本帖最后由 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)
但越模糊越不可靠, 如果非要这样做, 还不如直接匹配出相关链接了.
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# 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]