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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2010, 21:14   #1
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
Вопрос Заполнение формы на веб сайте через программу

Есть определенная форма на определенном сайте(к примеру добавление комментария), есть программа, человек вводит нужное ему значение формы в соответствующее окошко программы, кликает по соответствующей кнопке программы и происходит тоже что если бы он написал этот комментарий через сайт - он добавляется, а человеку разумеется вместо открытия страницы программа просто сообщает о положительном результате.
Не пойму как такое реализовать, в моем случае у этой формы присутствует капча, парсинг капчи я реализовал и он корректно работает, но вот как теперь передать на сайт введенную капчу и значение для основной формы ума не приложу(единственная мысль - тоже как-то через парсинг, но этим данная мысль и ограничивается ).
Заранее спасибо за помощь в решении этой проблемы!
Crystallon вне форума Ответить с цитированием
Старый 05.05.2010, 22:45   #2
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Значит плохо вы занимались парсингом. Скорее всего дам какой-то скрипт или форма, которая отсылает на сервер пост-запрос. Внимательно изучите, что за данные отсылает броузер на сервер.
Виталий Желтяков вне форума Ответить с цитированием
Старый 05.05.2010, 23:52   #3
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Цитата:
Сообщение от Виталий Желтяков Посмотреть сообщение
Значит плохо вы занимались парсингом. Скорее всего дам какой-то скрипт или форма, которая отсылает на сервер пост-запрос. Внимательно изучите, что за данные отсылает броузер на сервер.
Не понял к чему вы это, я тут не пытаюсь выяснить что где кто как отсылает, я говорю о конкретной задаче, я пишу программу для заполнения определенной формы на определенном сайте без захода на сам сайт, разумеется там post запрос...
Crystallon вне форума Ответить с цитированием
Старый 06.05.2010, 01:17   #4
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

В post запросе и добавляете текст "комментария" наряду с "словом" введенным с картинки , и вуаля
Lime вне форума Ответить с цитированием
Старый 06.05.2010, 03:32   #5
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Помогите разобраться как этот post запрос правильно сделать =)
Вот код формы на том сайте:
Код HTML:
	        <form action='/vote/8636/' id='voteFrom' method='post'>
	            <input type='hidden' name='referer' value='?'>
	                <input type='hidden' name='sec_referer' value='4b30c013d9042c579ca3f67b0980132c0568ae8b'>
	                <table border=0>
	                    <tr>
	                        <td colspan=2 align='left' style='padding-left: 40px;'>
                                <script type='text/javaScript'>
                                    function voteButtnRef(scr, n) {
                                        document.getElementById(scr).innerHTML = '';
                                        document.getElementById(scr).innerHTML += "<img src='/getimg.php?"+Math.random()+"' alt='Для просмотра включите отображение картинок' border=0>"
                                        document.getElementById(scr).innerHTML += "<img src='/4na.php?"+Math.random()+"' alt='Для просмотра включите отображение картинок' border=0>";
                                    }
                                </script>
	                            <span id='kapchaImg'>
	                                <img src='/getimg.php?541' alt='Для просмотра включите отображение картинок' border=0>
	                                <img src='/vdcp.php?541' alt='Для просмотра включите отображение картинок' border=0>
	                                <script type='text/javaScript'>
	                                    document.write("<img style='position: relative; left: -105px' src='/4na.php?"+Math.random()+"' alt='Для просмотра включите отображение картинок' border=0>");
	                                </script>
	                            </span><br>
	                            <a href='javascript:voteButtnRef("kapchaImg","");'>не видна картинка?</a>
	                        </td>
	                    </tr>
	                    <tr>
	                        <td> введите значение с картинок через пробел:<br>
	                            <input name='voteOk' type='hidden' value='ok'>
	                            <!--// <input name='b09f39ea' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='2d60b6d0' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='b3c03146' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='853d02c9' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='757cd3ff' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='43edf201' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='e3892e50' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='f88a69f4' type='text' value='' class='num2' maxlength='14'> //--><input name='b29c14d9' type='text' value='' class='num2' maxlength='14'><!--// <input name='3472a53b' type='text' value='' class='num2' maxlength='14'> //-->
	                        </td>
	                        <td width=90px>
	                            <a href='#' onClick='document.getElementById("voteFrom").submit(); return false;'><img src='/images/vote2.gif' alt='Проголосовать'></a>
	                        </td>
	                    </tr>
	                    <tr>
	                        <td>имя Вашего персонажа в игре*:<br><input name='name' type='text' value='' class='num2' maxlength=20></td>
	                        <td></td>
	                    </tr>
	                </table>
	                
	                <p>
	                    *Вы можете оставить это поле пустым если не хотите, чтобы данная информация была опубликована в статистике голосования за сервер.
	                    ВНИМАНИЕ: не вводите, пожалуйста, вместо имени чара бессмысленный набор символов, в противном случае наш рейтинг
	                    оставляет за собой право не учитывать подобные голоса и не показывать их в статистике голосования за сервер.
	                </p>
	            </form>
А вот соответствующий кусок кода из программы:

Код:
procedure TForm1.Button10Click(Sender: TObject);
var
 Str: TStringList;
 reply: string;
begin
 Str:=TStringList.Create;
 Str.Clear;
 Str.Add('name='+Edit4.Text+Edit2.Text);
 Str.Add('voteOk='+Edit1.Text);
 // UTF-8
 try
  reply:=IdHTTP1.Post('http://l2top.ru/vote/'+Edit5.Text+'/', Str);
  ShowMessage('Голосование успешно!');
 except
  ShowMessage('Голосование неудачно. Попробуйте снова.');
 end;
 Str.Free;
end;
На данный момент не работает так как нужно =)
Заранее спасибо!
Crystallon вне форума Ответить с цитированием
Старый 06.05.2010, 07:43   #6
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Здесь три варианта. Далее по порядку вероятности:
- Вы отсылаете не все данные. У вас на форме еще есть поля - referer и sec_referer. Попробуйте заполнить их.
- На сервере идет проверка referer-а, т.е. откуда пришел запрос. Необходимо изменить соответствующие настройки IdHTTP на приближенные к реальным.
- Нет куков. Тоже вполне возможно и надо разбираться конгретно по ситуации.
И ещё совет - установите нормальный парсер и проанализируйте пакеты, которые пересылаются между броузером и сервером.
Виталий Желтяков вне форума Ответить с цитированием
Старый 06.05.2010, 15:31   #7
Crystallon
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 273
По умолчанию

Цитата:
- Вы отсылаете не все данные. У вас на форме еще есть поля - referer и sec_referer. Попробуйте заполнить их.
Уже отсылаю, ничего не изменилось

Цитата:
- На сервере идет проверка referer-а, т.е. откуда пришел запрос. Необходимо изменить соответствующие настройки IdHTTP на приближенные к реальным.
Это не совсем понял, но думаю гугл поможет разобраться.

Цитата:
- Нет куков. Тоже вполне возможно и надо разбираться конгретно по ситуации.
Сомнительно что там стоит подобная проверка, ибо им оно не надо, но все же спасибо за мысль.

Цитата:
И ещё совет - установите нормальный парсер и проанализируйте пакеты, которые пересылаются между броузером и сервером.
Если не трудно скиньте пожалуйста ссылочку на таковой =)

P.S. Там еще хитрость в том что имя формы "капча" динамическое и изменяется при каждом обновлении страницы браузера, с этим я разобрался без особых проблем.
Еще просьба подсказать что я делаю не так с этим кодом:
Код:
begin
 body := WebBrowser1.OleObject.document.body;
 imgs := WebBrowser1.OleObject.document.images.item(1);//íóæíûé img
 controlRange := body.createControlRange;
 controlRange.add(imgs);
 controlRange.execCommand('Copy', False, EmptyParam);//êîïèðóåì
 if ClipBoard.HasFormat(CF_BITMAP) then begin
 Image2.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);//âñòàâëÿåì
 Clipboard.Clear;//ïî æåëàíèþ ÷èñòèì áóôåð...
 end;
end;
Он должен выводить сохраненное в кеше изображение, а он его не обнаруживает, как я предполагаю неправильно приписан путь, но как мне узнать правильный путь? Вот так загружается хтмл код с изображениями:
Код:
WB_LoadHTML(WebBrowser1, Label7.Caption);
Парсер вырезает все ненужное и оставляет только капчу, которых там 2, т.е. я на 100% уверен что после загрузки страницы в кеше должны быть эти 2 изображения, если они там будут накапливаться думаю должен быть способ просто каждый раз автоматически очищать кеш после пост запроса, но главный вопрос - как их найти и сделать так чтобы они нормально выводились в TImage.

Заранее огромное спасибо!
Crystallon вне форума Ответить с цитированием
Старый 06.05.2010, 19:29   #8
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

У Вас нет полной картины того, что Вы делаете, поэтому у Вас столько ошибок. Сначала найдите парсер HTTP-Analyzer или что-то в этом роде. Посмотрите конкретно на содержание пакетов.
По поводу проверки referer-а:
- Это как бы одно из свойств пересылаемого пакета, в котором записано откуда пакет. На многих сайтах его проверяют, мол, чтобы запрос пришел с конкретной страницы. В компонентах Delphi можно задать его программно.
По поводу кукисов:
- Всё же проверьте. Их часто используют при авторизации.
По поводу капчи:
- Весьма вероятно, что фаил капчи имеет рашрение png и просто так его в Delphi нельзя вывести в image - необходимы специальные модули. Но это не точно.
Установите парсер он прояснит ситуацию.
Виталий Желтяков вне форума Ответить с цитированием
Старый 06.05.2010, 20:02   #9
cavern
Новичок
Джуниор
 
Регистрация: 26.04.2010
Сообщений: 1
По умолчанию

Цитата:
Там еще хитрость в том что имя формы "капча" динамическое и изменяется при каждом обновлении страницы браузера, с этим я разобрался без особых проблем.
Проясни про это, и по поводу капчи напиши в асю 385-127-48ноль, у меня готова форма с капчами
И по поводу куки, как получить их в Memo?

Последний раз редактировалось cavern; 06.05.2010 в 21:06.
cavern вне форума Ответить с цитированием
Старый 13.06.2010, 00:01   #10
Andrey32
Пользователь
 
Аватар для Andrey32
 
Регистрация: 30.03.2010
Сообщений: 17
По умолчанию

подскажи как ты капчу спарсил а то я с таким рандомом дело не имел =(
Andrey32 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение веб формы RIO Работа с сетью в Delphi 5 05.08.2009 02:03
Заполнение поле формы автоматически из другой формы!! Магомед Microsoft Office Access 8 28.07.2009 13:49
программа, которая сохраняет веб страницы раз в час на сайте в определённой папке SeregaKo Общие вопросы Delphi 7 24.07.2008 16:10
заполнение формы zetrix Безопасность, Шифрование 1 29.10.2006 11:07