Что нового

Поиск нужной ссылки (href) в теле страницы

Ranos1982

Новичок
Сообщения
130
Репутация
1
Подскжаите пожалуйста как вытянуть не только текст сообщения но и саму ссылку (href)

Код:
Global $oIE


$oIE = _IEAttach('exbii')


$oLinks = _IETagNameallGetCollection($oIE)
$iNumLinks = @extended
MsgBox (16,'',$iNumLinks)
For $oLink In $oLinks
    If $oLink.outertext == 'jhgj' Then
       MsgBox (16,'нашли!',$oLink.outertext )
       MsgBox (16,'нашли!',$oLink.href)               ; вот тут ошибка.Там (тоесть это все как бы контейнер в тегах TD
                 ;с сообщением,ссылками там..цветом шрифта и т.д.) где я нашел в сообщение слово,там
                 ; и будет ссылка на ... например ответить на это сообщение.
                 ;И как мне на нее указать , я не знаю. 
                 ;И вот вопрос,как мне ...чтоли искать ссыльку на ответ именно в этом контейнере....

    EndIf
Next

:IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
_IETagNameallGetCollection($oIE) - это не совсем линки, а коллекция всех тегов (поэтому вываливается ошибка, т.к. href есть только у ссылок, а у div-вов, например, нет ;) ), и вот найдя нужный тег (в вашем случае с текстом 'jhgj') нужно искать ссылки внутри него, примерно так:
Код:
$oIE = _IEAttach('exbii')
$oLinks = _IETagNameallGetCollection($oIE)
$iNumLinks = @extended
MsgBox (16,'',$iNumLinks)
For $oLink In $oLinks
	If $oLink.outertext == 'jhgj' Then
		$oLinks_2 = _IELinkGetCollection($oLink)
		For $oLink_2 In $oLinks_2
			MsgBox (16,'нашли!',$oLink_2.outertext )
			MsgBox (16,'нашли!',$oLink_2.href)
		Next
	EndIf
Next


Моё решение подобной задачи:
HTML-код:
Код:
<div id="my_id" class="color">здесь много текста и ссылок</div>
Код:
$oDivNav = _IEGetObjById($oIE, 'my_id')
$oLinks = _IELinkGetCollection($oDivNav)
For $oLink In $oLinks
	...
Next
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
если это,то что я думаю , то большое спасибо!!!!!!!!!!!!!!!!!! тьри дня мучался (((((((((( :whistle:
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Redline

ваш пример слово находит,но ссылки выдает все со странице...
а именну ту,что привязана к этому слову (тоесть сообщению) - не выдает...мучаюсь третий день..
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Ну так что же тебе нужно? за три дня можно было всю справку изучить, а не только раздел ie
ps. функция находит текст, и кликает по ссылке на этом тексте. Если убрать "кликает", получится то что тебе нужно?
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Хоть ктото помочь может в ....в просто , чтобы посмотреть - правильно ли я думаю ? Вот это вроде бы работает :


Код:
;~ $oIE = _IECreate('http://www.exbii.com/showthread.php?p=29227327')
$oIE = _IEAttach('exbii')
$oLinks = _IETagNameGetCollection($oIE,'TD')
$iNumLinks = @extended
MsgBox (16,'',$iNumLinks)
For $oLink In $oLinks
;~ 	MsgBox (16,'нашли!',$oLink.outertext )
    If StringInStr ($oLink.outertext,'sorry,,,') Then
        $oLinks_2 = _IETagNameGetCollection($oLink,'a')  ; И ВОТ тут мы вытягиваем все ссылки текущего тега.НО 
;почему тогда если _IETagNameAllGetCollection - то выдает вообще много чего лишнего ?
        For $oLink_2 In $oLinks_2
            MsgBox (16,'нашли!',$oLink_2.outertext )
            MsgBox (16,'нашли!',$oLink_2.href)
        Next
    EndIf
Next
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Нус.. попробуем
Код:
#include <ie.au3>
#include <array.au3>
$oIE = _IECreate('http://www.exbii.com/showthread.php?p=29227327')
$sHTML = _IEBodyReadHTML($oIE)
$sPattern = '#<A id=postcount\d+ href="(.*?)"'
$aA = StringRegExp ($sHTML, $sPattern, 3)
_ArrayDisplay ($aA)
_IEQuit($oIE)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ranos1982
Анализируя ваши две темы (IMHO можно было и одну развивать) Нужна идея (работа с форумом) и эту, с горем пополам понял, что вам нужно.
Код:
#include <IE.au3>
#include <Array.au3>

Dim $sURL = 'http://www.exbii.com/showthread.php?p=29227327'
Dim $sText = 'jhgj' ; Искомое слово


$oIE = _IECreate($sURL)
$oTables = _IETableGetCollection($oIE)
$aResult = _SearchText($sText)

;~  _ArrayDisplay($aResult)
For $i = 0 To UBound($aResult) -1
;~ 	 _ArrayDisplay($aResult[$i][2])	
	Dim $sPostID = $aResult[$i][1]
	Dim $aLink = $aResult[$i][2]
	If IsArray($aLink) Then
		MsgBox( 0, 'Найдено совпадение: "' & $sText &'"', _
				'ID:' & @TAB & @TAB & @TAB & $sPostID & @CRLF & _
				'Номер поста: ' & @TAB & @TAB & $aLink[0][0] & @CRLF & _
				'Пользователь: ' & @TAB & @TAB & $aLink[1][1] & @CRLF & _
				'Домашняя страница: ' & @TAB & $aLink[2][1] & @CRLF & _
				'VCash: ' & @TAB & @TAB & @TAB & $aLink[3][1] & @CRLF & _
				'Ссылка на пост: ' & @TAB & @TAB & $aLink[0][1] & @CRLF )
	EndIf
Next

Func _SearchText($sSearchText)
	
	Local $iIndex = 0, $sResult, $aPost[1][3], $iPostCount = 1, $iLinkCount = 1
	
	For $oTable In $oTables
		If StringRegExp($oTable.id, 'post\d+', 0) Then
			$oDivs = _IETagNameGetCollection($oTable, 'div')
			For $oDiv In $oDivs
			If StringRegExp($oDiv.id, 'post_message_\d+', 0) Then
				If StringInStr(_IEPropertyGet($oDiv, 'InnerText'), $sSearchText) Then 
					If $iPostCount > 1 Then ReDim $aPost[$iPostCount][3]
					$aPost[$iPostCount-1][0] = $iIndex
					$aPost[$iPostCount-1][1] = $oTable.id
					$oLinks = _IETagNameGetCollection($oTable, 'a')
					Dim $aLink[1][2]
					For $oLink In $oLinks
						If _IEPropertyGet($oLink, 'InnerText') <> '' Then 
							If $iLinkCount > 1 Then ReDim $aLink[$iLinkCount][2]
								$aLink[$iLinkCount-1][0] = _IEPropertyGet($oLink, 'InnerText')
								$aLink[$iLinkCount-1][1] = $oLink.href
							$iLinkCount += 1
						EndIf
					Next
					$aPost[$iPostCount-1][2] = $aLink
					$iLinkCount = 1
					$iPostCount += 1
				EndIf
			EndIf
			Next
		EndIf
		$iIndex += 1
	Next
	
	Return $aPost
EndFunc
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Garrett

а тот пример что я привел? что Вы скажете о нем?

Просто этот для меня немного сложен и регулярные выражения....)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Ranos1982 [?]
что Вы скажете о нем?
Ничего. Просто найдите с помощью вашего примера в постах букву "h" на том форуме, который вы указали.
Кстати я немного поправил код и убрал его в функцию, чтобы вам не было:
Просто этот для меня немного сложен



Добавлено:
Сообщение автоматически объединено:

А вообще решать вам, что и как использовать! ;)
 
Автор
R

Ranos1982

Новичок
Сообщения
130
Репутация
1
Garrett


а вот так ? ;)
Код:
MsgBox (16,'',getLinkPost($oIE, 'TD', 'A', 'h', 'newreply'))

Func getLinkPost($o_object, $tagA, $tagB, $stringText, $stringLink)

	$oLinks = _IETagNameGetCollection($o_object, $tagA)
	For $oLink In $oLinks
		If StringInStr($oLink.outertext, $stringText) Then
			$oLinks_h = _IETagNameGetCollection($oLink, $tagB)
			For $oLink_h In $oLinks_h
				$resultLink = $oLink_h.href
				If StringInStr($resultLink, $stringLink) Then
					Return $resultLink
					ExitLoop
				EndIf
			Next
		EndIf
	Next

EndFunc   ;==>getLinkPost
 
Верх