Что нового

Как получить список линков (объекты) из iFrame?

timsky

Осваивающий
Сообщения
93
Репутация
28
Столкнулся с головоломкой одной, уже часа 4 угрохал на нее. Нужно получить список всех УРЛов на странице, причем DOM объекты.
Затык возник при работе с iframe на этом сайте: keywordaccess.com
_IEFrameGetCollection(), _IELinkGetCollection и _IEIsFrameSet() здесь вообще бессильны. Они на этой странице в лучшем случае выдергивают только линк на лого (gif) и все... как я только не пробовал - бесполезно.
Нашел выход _IETagNameAllGetCollection() и _IETagNameGetCollection():

Код:
#include <IE.au3>
#include <Array.au3>

$oIE = _IECreate('keywordaccess.com')

$found = 0
Dim $aLinks[$found + 1][2] ; Создаем массив найденных линков
$aLinks[0][0] = $found

$oLinks = _IETagNameGetCollection($oIE, 'a')
For $oLink In $oLinks
	; MsgBox(0, 'Tagname: ' & $oLink.tagname, 'InnerText: ' & $oLink.InnerText & @CRLF & 'Href: ' & $oLink.href)
	$found += 1
	ReDim $aLinks[$found + 1][2] ; Прибавляем в массив
	$aLinks[0][0] = $found ; Изменяем итоговое кол-во найденных линков
	$aLinks[$found][0] = $oLink.href ; Сохраняем URL найденной ссылки
	$aLinks[$found][1] = $oLink ; Сохраняем Объект найденной ссылки
Next

_ArrayDisplay($aLinks)


; А тепер попробуем выдрать УРЛы из iFrame

$oElements = _IETagNameAllGetCollection($oIE)
For $oElement In $oElements
	If StringInStr($oElement.tagname, 'frame') Then
		;ClipPut($oElement.src)
		MsgBox(0, 'Element Info', 'Tagname: ' & $oElement.tagname & @CRLF & @CRLF & 'SRC: ' & $oElement.src & @CRLF & @CRLF & 'OuterHTML: ' & $oElement.OuterHTML)
		$oLinks = _IETagNameGetCollection($oElement, 'a')
		For $oLink In $oLinks
			MsgBox(0, 'Tagname: ' & $oElement.tagname, 'InnerText: ' & $oElement.InnerText & @CRLF & 'Href: ' & $oElement.href)
			$found += 1
			ReDim $aLinks[$found + 1][2] ; Прибавляем в массив
			$aLinks[0][0] = $found ; Изменяем итоговое кол-во найденных линков
			$aLinks[$found][0] = $oLink.href ; Сохраняем URL найденной ссылки
			$aLinks[$found][1] = $oLink ; Сохраняем Объект найденной ссылки
		Next
	EndIf
Next

_ArrayDisplay($aLinks)
; НИФИГА!!!


Этот скрипт выдергивает основную часть УРЛов, но не может никак зацепить iFrame :(

То, что можно отдельно загрузить страницу /advertisers/guides-iframe.html я знаю, но нужно получить доступ к объектам именно с морды. Но как???
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Дело в том, что iFrame используется для создания отдельных, независимых фреймов. Документ, загружаемый в iFrame, не существует в общем, потоке DOM документа.

Если посмотрите исходный код загруженного документа, то увидите следующее:
Код:
<iframe src="http://www.keywordaccess.com/advertisers/guides-iframe.html" name="advertiser" width="570" height="470" align="left" scrolling="auto" frameborder="0" id="advertiser"> (…пустота…) </iframe>

Боюсь, вам всё же придётся загружать документ /advertisers/guides-iframe.html для того чтобы вытащить ссылки.
 
Автор
timsky

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
Если посмотрите исходный код загруженного документа, то увидите следующее:
Исходный код сомотрел :smile:

Документ, загружаемый в iFrame, не существует в общем, потоке DOM документа.
Вот это и странно, с чего бы это...
 
Верх