Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2011, 02:01   #1
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию Парсинг скрытых данных

Здравствуйте, пытаюсь достать ссылку на файл, который загружается на компьютер при нажатии кнопки. Сайт: http://safarizator.ru/

Загрузить файл можно post'ом, но дело в том, что ссылка на преобразованное изображение (которое в браузере можно скачать при клике на кнопку) - невидима. Ссылка создается в скрипте и имеет вид: http://safarizator.ru/files/out4e779...f5ab/image.png - естественно, часть между "files" и именем файла генерируется случайно.

В браузере можно посмотреть код элемента (кнопки "Скачать"), но в коде страницы на него ссылается лишь строка <div id="tpl-status-block"></div>
В этом и вопрос: как достать ссылку?
Код HTML:
<div id="tpl-status-block">
	<div class="tpl-status-field">
		<span class="tpl-status-label">Исходный файл:</span>
		<span class="tpl-status-name" id="fld-in-name">cowboy.png</span>
		<span class="tpl-status-size" id="fld-in-size">305,97&nbsp;<span class="tpl-status-size-metric">кб</span></span>
	</div>
	<div class="tpl-status-field">	<span class="tpl-status-label">Полученный файл png:</span>
	<span class="tpl-status-name" id="fld-png-name">cowboy.png</span>
	<span class="tpl-status-size" id="fld-png-size">333,31&nbsp;<span class="tpl-status-size-metric">кб</span></span>
	<a href="/files/out4e779e4facacf5ab/image.png" class="tpl-status-link" id="fld-png-download" style="display: block; ">Скачать</a></div>
</div>
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 20.09.2011, 02:47   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

а всё просто:
Нужы функции Pos,PosEx,Copy.
1. Ищем <div id="tpl-status-block"> и удаляем все что до него.
2. ищем <a href=" затем ищем " class="tpl-status-link"
то что мижду ними копируем в переменную s:string получаем часть ссылки.
3. Далее host+s где host - это сайт s - грабанутая ссылка.
Человек_Борща вне форума Ответить с цитированием
Старый 20.09.2011, 11:57   #3
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Человек_Борща, благодарю за ответ, но вы не поняли. В полученном после post'а коде нет того, что необходимо парсить. Даже в браузере этого кода не видно на главной странице после закачки на сервер файла. Он виден только после того, как я нажму правой кнопкой мыши на "Скачать" и выберу "Показать код элемента".

В том и дело, что в коде главной страницы на код кнопки ссылается лишь одна строчка: <div id="tpl-status-block"></div> - а ссылки, которая должна быть под ней - нет.

Если сравнить код сайта до (когда нужно загрузить файл на сервер) и после (когда нужно загрузить преобразованный файл обратно на компьютер) закачки - ничего не меняется. Только визуально добавляется новая кнопка, а в коде ссылки, по которой она идет, да и самого ее описания - нет.

Проблема. Как получить тот код, что я привел в первом посте?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 20.09.2011 в 11:59.
Neeter вне форума Ответить с цитированием
Старый 20.09.2011, 12:53   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Опять же все ещё проще..
Програмно отправляйте файл на сайт(multipart/form-data), сайт вам ответит вот таким кодом:
Код:
<!-- dl.jpg -->
<script type="text/javascript">parent.setData("uploadSize",110689)<script>
<script type="text/javascript">parent.setData("downloadPngSize", 541764);
parent.setData("downloadPngName", "dl.png");
parent.setData("downloadPngUri", "/files/out4e78451374adf284/dl.png")</script>
Получить html не возможно. То, что возвращает php-скрипт сервера после аплоада файла - это javascript который выполняется интерпритатором java исключительно на стороне клиента(на страничке серевера, кнопки как таковой, не существует). Она есть только в вашем браузере. Как вариант TWebBrowser(тот ещё гемор, но если вам хочется html'а и кода на пару сотен строк..=))

Последний раз редактировалось Человек_Борща; 20.09.2011 в 13:01.
Человек_Борща вне форума Ответить с цитированием
Старый 20.09.2011, 14:02   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Отправляю файл:

Код:
procedure TForm1.Button4Click(Sender: TObject);
var
 str: TStrings;
 formdata: TIdMultiPartFormDataStream;
begin
 formdata := TIdMultiPartFormDataStream.Create;
 formdata.AddFile('file', edit1.Text, 'image/png');
 IdHTTP1.Request.ContentType := 'multipart/form-data';
 str := TStringList.Create;
 try
  str.text := IdHTTP1.Post('http://safarizator.ru/safari.php', formData);
  Memo1.Lines.Text := str.text;
 finally
  str.Free;
  formdata.Free;
 end;
end;
Но в Memo выводится лишь:

Код HTML:
<!-- image.png -->
<script type="text/javascript">parent.setData("uploadSize", 313317)</script>
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 21.09.2011, 01:40   #6
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Код сверху правильный. Просто строки

Код HTML:
<!-- image.png -->
<script type="text/javascript">parent.setData("uploadSize", 313317)</script>
и

Код HTML:
<script type="text/javascript">parent.setData("downloadPngSize", 541764);
parent.setData("downloadPngName", "dl.png");
parent.setData("downloadPngUri", "/files/out4e78451374adf284/dl.png")</script>
были разделены большим количеством пробелов (а скроллбары в мемо по дефолту отключены). Я это не сразу заметил. Человек_Борща, благодарю.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсинг данных с bash.org.ru ivannes Работа с сетью в Delphi 6 29.03.2013 20:52
Парсинг данных из Stringlist Lauri Общие вопросы Delphi 5 21.04.2011 20:22
Парсинг данных Shouldercannon Общие вопросы Delphi 2 09.07.2010 13:14
Парсинг полученных данных Shouldercannon Общие вопросы Delphi 11 09.01.2010 21:47
Создание скрытых файлов HunterMan Win Api 1 04.06.2008 04:01