Что нового

Получение данных с html-страницы

Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
А почему в данном случае не работают ссылки на детей?
На соседей, кстати, тоже. :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
FirstChild вернет текстовый элемент, который может быть пробел, перевод строки, комментарии итп, вряд ли вам они нужны, поэтому вместо ..hode, firstChilde ипт используйте firstElementChild, parentElement. Подробнее тут
И на будущее: Прежде чем переносить код в autoit, проверяйте в консоле браузера, вам там сразу все ошибки напишет и даже те, что элементы не найдены.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Ведь читал ночью по Вашей ссылке про пробелы и переводы строки. Видел и ...Element... - а в единое в голове не сложилось. :(
Еще раз спасибо! :smile:
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
А innerText как то можно использовать в querySelector?
Например, в примере выше:
Код:
<div class="labelLayer">7</div>
можно искать не просто по class="labelLayer":
Код:
document.querySelector('[class="labelLayer"]').innerText = 8
, а как то с учетом, что следом идет "7"?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
K7A4 [?]
А innerText как то можно использовать в querySelector?
Нет, нельзя. Получите все элементы через querySelectorAll и в цикле ищите нужный элемент.
Код:
For $i=0 to $els.length - 1
$el = $els.item($i)
If String($el.innerText) = '7' Then ...
If StringInStr($el.innerText, '7') Then ...
Next

Или если на странице подключен jQuery, то через .contents() можно найти
Код:
$('div:contains("7")')
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
inververs сказал(а):
Или если на странице подключен jQuery, то через .contents() можно найти
Код:
$('div:contains("7")')
С этого места можно по подробнее? :smile:
Это прямо в querySelect использовать:
Код:
document.querySelector('$(''div:contains("7")'')').innerText

Или я с апострофами запутался (я задублировал одинарные внутри Вашего текста) или ... не работает.


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

Смотрю - прямо в консоли можно ввести:
$('div:contains("7")')
Но в ответ выдает:
null
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
K7A4
Специально для тебя написал. 8)

a.dropdown-toggle :contains("Опции") -этим селектором я ищу ссылку с классом dropdown-toggle, содержащую строку Опции

Но что бы это работало, на странице должен быть jQuery. Проверить можно, открой браузер - консоль, введи jQuery, если покажет типа:
Код:
function(e,n){return new x.fn.init(e,n,t)}
значит все ок, библиотека есть.

Код:
Local $jQuery = browser_getJQuery($oIe)
If Not @error Then
	$oElement = $jQuery('a.dropdown-toggle :contains("Опции")').get(0)
	If IsObj($oElement) Then
		MsgBox(0, 'Элемент', $oElement.outerHtml)
	Else
		MsgBox(0, '', 'Элемент не найден')
	EndIf
Else
	MsgBox(0, '', 'jQuery не найден')
EndIf

Func browser_getJQuery($oIe)
	If Not IsObj($oIe) Then Return SetError(1, '1. $oIe не объект', False)

	Local $js = $oIe.document.createElement('script')
	$js.text = 'document.jQuery = jQuery;'
	$oIe.document.body.appendChild($js)
	$oIe.document.body.removeChild($js)

	Local $jQuery = $oIe.document.jQuery
	If @error Or Not StringInStr($jQuery(), 'function') Then
		Return SetError(2, '2. jQuery не найден', False)
	EndIf

	Return $jQuery
EndFunc   ;==>browser_getJQuery
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
inververs сказал(а):
K7A4
Специально для тебя написал. 8)
Спасибо огромное, но боюсь не оправдать надежд. :(
Пока даже понять не могу: на большинстве страниц в интернете после "jQuery" пишет "function ...", на некоторых пишет - ""jQuery" не определено", а там где мне надо - не пишет вообще ничего. Просто молча глотает строку и ничего в ответ вообще не выводит! :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Значит его нет. Но можно "вгрузить" через browser_injectScript
Вот пример:
Код:
$sScript = FileRead('jquery-2.2.1.js')
browser_injectScript($oIe, $sScript)
Local $jQuery = browser_getJQuery($oIe)
... и т.д.


Скачать можно здесь http://jquery.com/download/

Код:
Func browser_injectScript($oIe, $sScript)
	If Not IsObj($oIe) Then Return SetError(1, '1. $oIe не объект', False)
	Local $js = $oIe.document.createElement('script')
	$js.text = $sScript
	$js.defer = 'defer'
	$oIe.document.body.appendChild($js)
	$oIe.document.body.removeChild($js)
	Return True
EndFunc
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Бр-р-р, давай по частям.

Я, конечно, вообще не понял как это в принципе должно работать. И где текст самого скрипта. Неужели вот это: 'document.jQuery = jQuery;'?
Ладно, буду по ходу разбираться.

Попробовал с yandex.ru. Там есть, например, код:
Код:
<a class="link link_gray_yes business__link i-bem link_js_inited" href="https://direct.yandex.ru/?from=maintest_ru_razmestitrekl">Директ</a>
Я попробовал у себя в скрипте вставить твою часть скрипта, заменив
Код:
$oElement = $jQuery('a.dropdown-toggle :contains("Опции")').get(0)
на
Код:
$oElement = $jQuery('a.link link_gray_yes business__link i-bem link_js_inited :contains("Директ")').get(0)
Результат: 'Элемент не найден'.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
K7A4
Я тебе предлагаю все таки выучить то, что ты используешь.
Вот это a.link link_gray_yes business__link i-bem link_js_inited :contains("Директ") полная хрень.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
inververs, да - в данном случае я вообще не понимал, что делаю.

Действовал буквально - ты написал:
"a.dropdown-toggle :contains("Опции") -этим селектором я ищу ссылку с классом dropdown-toggle, содержащую строку Опции"
вот я и заменил в твоем тексте:
"dropdown-toggle" на название класса "link link_gray_yes business__link i-bem link_js_inited"
и
"Опции" на строку "Директ", содержащуюся в коде.
Т.е. я искал ссылку с классом "link link_gray_yes business__link i-bem link_js_inited", содержащую строку "Директ" :smile:

Видать не угадал ;D
 
Верх