Что нового

Как получить из IE данные в буфер обмена?

ViktorSPB

Новичок
Сообщения
109
Репутация
0
Доброго всем дня.
Вопрос в следующем.
Есть рессурс - Quote.ru
На нем есть информация о ПИФах.
Например здесь http://quote-otc.rbc.ru/149/pifcost/index.jsp?date=01.03.2012&pifID=907&web=1&skin=quote
Справа над таблицей есть текст "Экспорт"
Кликая по нему, именно кликая, (перейти по ссылке этого элемента не получается) выскакивает окошко IE с вопросом о разрешении записи в буфер обмена. Если разрешаю, то в буфере появляются данные, которые можно в Excel вставить и увидеть таблицу. Если вставить в текстовик, то вижу неразпарсенные данные..
Моя задача, с этого рессурса получить массив и обработать. Если будут проблемы с преобразованием данных, если понадобится парсить, то в принципе, могу и через экзель это сделать, потом оттуда массив вытащить.
Вопрос возник, потому что не знаю как уйти от выскакивающего меню с подтверждением, кроме того, приходится страницу кодом открывать видимой, только тогда в 100% срабатывает клик по Экспорту... Как решить мою задачу? Может, есть еще какие-нибудь библиотеки, которые мне помогут? Помогите пожалуйста, с решением.
Конечно, хотелось бы, чтобы работа скрипта никаких лишних окон не открывала на экране.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
ViktorSPB
Интересно, там защита, видимо, какая-то :stars:
Обычными методами у меня не получилось.

Для таблиц на страницах есть функции

Код:
_IETableGetCollection()

Код:
_IETableWriteToArray()


Но они не срабатывают на этой странице, по крайней мере, у меня :scratch:
Вроде даже
Код:
InetGet()
не работает...
 
Автор
V

ViktorSPB

Новичок
Сообщения
109
Репутация
0
Да.. вот именно..
Но не совсем защишено все.
Кликать можно.
вот так например
Код:
#include <IE.au3>

$url = "http://quote-otc.rbc.ru/149/pifcost/PifCost.jsp?date=01.03.2012&pifID=1262&web=1&skin=quote#"
$oIE = _IECreate ($url,0,0)
_IELinkClickByText ($oIE, "Экспорт")


Но выскакивает окошко о подтверждении доступа к буферу. Подозреваю, что это чудо можно убрать настройками безопасности (конечно не хотелось бы..) Но потом выскакивает еще окно "Сообщение с вэб-страницы". Всего этого не хочется видеть, сами понимаете..
Пока еще не копировал программно в экзель, но это следующий этап, и может не пригодиться, мало ли как данные можно с буфера обработать..
Если речь о файле экзелевском на сайте, то вопросов нет, я уже сделал, но тогда надо под каждую УК писать по сути свою программу, формат данных разный. А если бы удалось подключиться к этому рессурсу, жизнь бы во многом упростилась.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Не бойтесь смотреть в исходный код страницы. Ответ, в данном случае, был там.

Код:
http://quote-otc.rbc.ru/149/pifcost/PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote
это нужная Вам страница с таблицей, а далее даты и цены в массиве :smile:

Код:
#include <Array.au3>

$sText = BinaryToString(InetRead("http://quote-otc.rbc.ru/149/pifcost/PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote"))

$aDate = StringRegExp($sText, "<td >(.*?)</td>", 3)
$aPrice = StringRegExp($sText, '<td x:num="(.*?)">', 3)

_ArrayDisplay($aDate)
_ArrayDisplay($aPrice)
 
Автор
V

ViktorSPB

Новичок
Сообщения
109
Репутация
0
ЗдОрово!
Я в HTML не разбираюсь, но благодаря Вам понял как искать. Спасибо Вам большое!
Не могли бы Вы пояснить как из
[box title=TitleBox]
<a onclick="document.getElementById('buffer').src='PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote'; return false;" href="#">
[/box]
получилось
[box title=TitleBox]
http://quote-otc.rbc.ru/149/pifcost/PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote
[/box]
?
На будущее, так сказать..
Каким образом ссылка на
[box title=TitleBox]
http://quote-otc.rbc.ru/149/pifcost/[/box]
получилась?
Я если бы и увидел, не догадался бы.. :(
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
src='PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote';
это относительный путь на файл PifCostExcel.jsp с параметрами.

Ссылка находится в директории /149/pifcost/ (в файле index.jsp, на который Вы в начале дали ссылку), следовательно запрос будет послам в эту же директорию, тогда абсолютный путь этого файла - тот, что я Вам предоставил :smile:
 
Автор
V

ViktorSPB

Новичок
Сообщения
109
Репутация
0
Просмотрел файл, через поиск нашел 2 места с
/149/pifcost
Наглядно, так сказать, не понятно мне пока что это именно тот адрес, надо все-таки немного знать HTML. Спектрумовский подход в вытаскивании полезной инфы не прошел) Но методом тыка)) , думаю, справлюсь в будущем.
Еще раз спасибо! Сам бы не догадался.

А Вы не могли бы мне еще помочь))) :angel:
Вот строки:
[box title=TitleBox]
<TD>01.03.2012</TD>
<TD x:num="852.11">852.11</TD>
<TD x:num="695369.57">695 369.57</TD></TR>
[/box]
Ваши рег.выражения немного не так как мне бы хотелось данные вытаскивают..
Я хотел бы 3 массива в данном случае получить. Подскажите, пожалуйста, регулярное выражение на них. Если есть, конечно, время и желание. Сижу сейчас, так и сяк пробую, пока не получается.. Трудно мне с ними, а инструмент это очень хороший :(
 

Fever

Скриптер
Сообщения
308
Репутация
112
Адекватного решения я, к сожалению, не вижу ибо строки
Код:
<TD x:num="852.11">852.11</TD>
<TD x:num="695369.57">695 369.57</TD>
уж больно схожи и парсить их отдельно у меня не получается

в голову приходит только такой вариант, но он замедляет время парсинга почти что на 1 секунду и не гарантирует быть верным, если в одной из дат не будет двух колонок с ценами.
Код:
#include <Array.au3>

Local $aPrice1[1], $aPrice2[1]

$sText = BinaryToString(InetRead("http://quote-otc.rbc.ru/149/pifcost/PifCostExcel.jsp?date=01.03.2012&pifID=907&web=1&skin=quote"))

$aDate = StringRegExp($sText, "<td >(.*?)</td>", 3)
$aPrice = StringRegExp($sText, '<td x:num="(.*?)">', 3)

For $i=0 To UBound($aPrice)-1 Step 2
	_ArrayAdd($aPrice1, $aPrice[$i])
Next

For $i=1 To UBound($aPrice)-1 Step 2
	_ArrayAdd($aPrice2, $aPrice[$i])
Next

_ArrayDisplay($aDate)
_ArrayDisplay($aPrice1)
_ArrayDisplay($aPrice2)
 
Автор
V

ViktorSPB

Новичок
Сообщения
109
Репутация
0
Fever, да, похожи, но есть отличия. Кроме того, если брать цифры из ковычек, то там появляются 8.175541685E7. Не знаю, как в расчетах AutoIt их проглотит.. В общем, буду парсингом заниматься. По
Код:
<TR id=tHeader>
<TD style="WHITE-SPACE: nowrap" align=center>Дата</TD>
<TD style="WHITE-SPACE: nowrap" align=center>Стоимость пая, руб.</TD>
<TD style="WHITE-SPACE: nowrap" align=center>Стоимость ЧА, руб.</TD></TR></THEAD>
можно понять размерность массива, число столбцов, и какие данные к чему относятся. Число строк можно посчитать по
Код:
<TR class=even>
Сейчас буду сам все это стараться сделать и параллельно создам тему по парсеру, может, есть у кого уже готовое.. Да сначала поиском поищу.
Еще раз спасибо за решение!

В продолжение темы создал http://autoit-script.ru/index.php/topic,9159.new.html
 
Верх