Что нового

получить данные из результата JS

Shinoby

Новичок
Сообщения
81
Репутация
2
На странице, JS генерирует ссылку, которую нужно получить в переменную.
Не знаю как это сделать :( какими вообще инструментами можно воспользоваться, что бы получить результат работы явы???
вот ссылка на страницу: www.adstelex.com там где "your username" можно ввести что угодно и нажать "post ad" появляется ссылка, которую нужно считать.

Хелп!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Предлагаю такой вариант:
При нажатии на кнопку "Post Ad" мы получаем запрос.
Этот запрос можно выполнить двумя способами.
Способ первый. Использовать IE (IE.au3),
открыть страницу в Internet Explorer и заполнить форму.
Способ второй.
Самостоятельно (без использования браузера) обрабатывать запросы (функциями WinHttp).
Способ выбирать Вам.
Сразу скажу: что для новичка второй способ может показаться сложноватым...
Для второго способа приведу пример запроса (из Firefox):
Код:
http://www.adstelex.com/processor.php
POST /processor.php HTTP/1.1
Host: www.adstelex.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://adstelex.com/
Content-Length: 52
Origin: http://adstelex.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

f_units=1
f_username=Alexey
postads=yes


HTTP/1.1 200 OK
Date: Fri, 21 Feb 2014 19:39:19 GMT
Server: Apache/2.2.25 (Unix) mod_ssl/2.2.25 OpenSSL/1.0.0-fips mod_bwlimited/1.4
X-Powered-By: PHP/5.3.27
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=3524c9c34da8958ded2f46a06c692ddf; path=/
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Примеры кода IE.au3 и WinHttp можно найти на форуме и в справке AutoIt.
 
Автор
S

Shinoby

Новичок
Сообщения
81
Репутация
2
я и использую библиотеку IE - открываю в эксплореле, заполняю форму и получаю ответ. ответ в ява окошке и в тексте страницы явно не представлен. как его вытащить?
вот код:

Код:
$adUrl = "http://www.adstelex.com/"
$adIE = _IECreate($adUrl)
$adF1 = _IEGetObjById($adIE, 'f_username')
				_IEFormElementSetValue($adF1, "any name")
				$oInputs = _IETagNameGetCollection ($adIE, "input") 
				For $oInput In $oInputs					
					If $oInput.attributes.getNamedItem('id').nodeValue = "postad" Then
						_IEAction($oInput,"click")
						_IELoadWait($adIE)
						ExitLoop
					EndIf
				Next
				_IELoadWait($adIE)


после этого получается ссылка, которую надо както вытянуть...
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
после этого получается ссылка, которую надо както вытянуть...
Эта ссылка находится в поле input с id f_ad1
Вот код:
Код:
#include <IE.au3>
$adUrl = "http://www.adstelex.com/"
$adIE = _IECreate($adUrl)
$adF1 = _IEGetObjById($adIE, 'f_username')
                _IEFormElementSetValue($adF1, "any name")
                $oInputs = _IETagNameGetCollection ($adIE, "input")
                For $oInput In $oInputs
                    If $oInput.attributes.getNamedItem('id').nodeValue = "postad" Then
                        _IEAction($oInput,"click")
                        _IELoadWait($adIE)
                        ExitLoop
                    EndIf
                Next
                _IELoadWait($adIE)
         Sleep(2000) ; ожедание появления ссылки
        $adF2 = _IEGetObjById($adIE, 'f_ad1')
                $sRes = _IEFormElementGetValue($adF2)
       MsgBox(0, "ССЫЛКА", $sRes)

p.s. У меня работает.
Sleep нужен для того, чтобы дождаться появления ссылки в поле.
Для надёжности время можно увеличить или отслеживать ссылку в цыкле.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
alex33 [?]
Sleap нужен для того, чтобы дождаться появления ссылки в поле.
Код:
#include <IE.au3>
_IEErrorNotify(0)
$sUrl = "http://www.adstelex.com/"
$oIE = _IECreate($sUrl)
$oUserName = _IEGetObjById($oIE, 'f_username')
_IEFormElementSetValue($oUserName, "any name")
$oPostad = _IEGetObjById($oIE, "postad")
_IEAction($oPostad,"click")
 _IELoadWait($oIE)
Do
	$oAD = _IEGetObjById($oIE, 'f_ad1')
Until Not @error

$sRes = _IEFormElementGetValue($oAD)
MsgBox(0, "ССЫЛКА", $sRes)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Garrett
Да, код получше моего. :smile:
p.s. Я торопился, хотел первым ответить, вот и набросал...
 
Автор
S

Shinoby

Новичок
Сообщения
81
Репутация
2
класс! спасибо!

вопрос: а как Вы нашли этот тэг 'f_ad1' ???
или для этого был эксперемент с коллекцией всех тэгов и поиск того у которого текст = ссылке?


UPD: зашел на страницу Хромом и через "просмотр кода элемента" - все увидел. до этого смотрел только страницу и ИЕ.
а в ИЕ есть что-то подобное?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
зашел на страницу Хромом и через "просмотр кода элемента" - все увидел.
Я так же, только через Firefox (firebug.ru getfirebug.com)
А ещё можно и без Firebug узнать (мышкой выделить, нажать ПКМ и "Исходный код выделенного фрагмента")...
а в ИЕ есть что-то подобное?
В сети полно для этого плагинов. Скажу сразу никогда ими не пользовался (и в ближайшее время не буду)...
Найдено в Google:
Живой HTML в IE: плагин Fullsource - Javascript.ru
Живой HTML в IE: плагин HTML Source
 
Автор
S

Shinoby

Новичок
Сообщения
81
Репутация
2
упс. а проблема то не решилась...
не находит скрипт инпута с сылкой.
может быть ИЕ старый? на ХР стоит ИЕ8. и более крутой поставить не удастся.

после генерации ссылки, пробовал вообще посмотреть все input - ни одного нет. :(

собственно ИЕ показывает код до iframe а что внутри этого тега - не показывает и не читает. непонятно почему так, но факт. :(
как можно заполучить код фрейма?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Shinoby
упс. а проблема то не решилась...
не находит скрипт инпута с сылкой.
может быть ИЕ старый? на ХР стоит ИЕ8. и более крутой поставить не удастся.
Я запустил скрипт из под Windows XP SP3, IE 6, AutoIt 3.3.8.1. Всё работает и ссылку получает.
Если не верите могу видео сделать, показать.. :D
 
Автор
S

Shinoby

Новичок
Сообщения
81
Репутация
2
а теперь сработало.

видимо фаза луны.
 
Верх