-
Stranger (01.12.07 19:05) [0]Доброго времени суток.
Ситуация: есть сайт на котором есть форма для отправки данных.
Вопрос: каким образом можно реализовать автоматическое заполнение-отправку данной формы из моей программы на delphi.
Заранее спасибо -
DiamondShark © (03.12.07 16:38) [1]Отправить на этот сайт нужным образом сформированный GET или POST http-запрос.
-
Dennis I. Komarov © (04.12.07 10:02) [2]> [0] Stranger (01.12.07 19:05)
На сайтах обычно делают защиту от ботов, так что 99% что не получиться. (Все не так просто). -
MetalFan © (04.12.07 14:12) [3]если нет доп защиты от ботов (ввод капчи, разгадывание загадки), то вполне реально сгенерировать такой же, как и браузер, запрос из своей программы.
в случае доп.защиты это так же возможно, но гораздо сложнее -
Lamer666 (05.12.07 12:38) [4]Если на страничке при отправке данных формы нет ЗАЩИТЫ ОТ СПАМА (контрольные цифры или что то вэтом роде) то так делаешь:
1. На форму кидаешь TWEBBROWSER
2. В процедуре создания формы пишешь:WebBrowser1.Navigate('АДРЕСС');
3. На форму конпку (при нажатии на которую будут заполняться и отправляться данные):FillFun('имя поля','значение для имени поля',WebBrowser1);
- эта функция ищет нужное поле по имени, и вводит туда твои данные
Выше указанную строчку для всех полей которые хочешь заполнить!
Например:FillFun('_phoneNumber','',WebBrowser1);
FillFun('_salePointCode','050500700',WebBrowser1);
FillFun('_iNN','000013375592',WebBrowser1);
FillFun('_contactPhone','0000015010',WebBrowser1);
И так далее.
Сама функция FillFun выглядит так:Function FillFun (Sid:string;Svalue:string;WebBrowser1:TWebBrowser):Boolean;
Var i,j:integer;FormItem:variant;
Begin
Result := False;
For I := 0 to WebBrowser1.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
If (FormItem.Item(j).name=Sid) and (FormItem.Item(j).type='text') then
begin
Result:=True;
FormItem.Item(j).Value:=Svalue;
end;
except
Exit;
end;
end;
end;
End;
После заполнения всех форм пишешь следующее:For I := 0 to WebBrowser1.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
If (FormItem.Item(j).type='submit') and (FormItem.Item(j).value='НАДПИСЬ НА КНОПКЕ') then FormItem.Item(j).click;
//when the fieldname is found, try to fill out
{if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;}
except
Exit;
end;
end;
end;
Тут мы ищем ЭЛЕМЕН типа 'submit' (кнопка), надпись на которой "НАДПИСЬ НА КНОПКЕ", как только такую нашли (кнопок может быть много (хотя нет гарантии что НЕТ ДВУХ кнопок с одинаковыми надписями на них - ориентируйся по ситуации)) щелкаем нанее, тем самым отправляем данные.... -
Dennis I. Komarov © (05.12.07 14:57) [5]> [4] Lamer666 (05.12.07 12:38)
ИМХО не стоит так делать, и советы такие давать тоже!
Читать [1] до полного просветления -
Lamer666 (05.12.07 16:23) [6]
> ИМХО не стоит так делать, и советы такие давать тоже!
> Читать [1] до полного просветления
Пока я ВИЖУ что я ХОТЬ что то человеку ПРАКТИЧНОЕ написал в отличии от Вас, уважаемый! -
Dennis I. Komarov © (06.12.07 10:38) [7]> [6] Lamer666 (05.12.07 16:23)
Зачем я буду писать, если в [1] уже ответили. Далее вопросов от автора не поступало.
> ХОТЬ что то человеку ПРАКТИЧНОЕ написал
Медвежья услуга! :) -
Lamer666 (06.12.07 11:05) [8]Для КОГО услуга, для кого ПОМОЩЬ!
-
Dennis I. Komarov © (06.12.07 14:49) [9]> [8] Lamer666 (06.12.07 11:05)
Медвежья услуга - не помощь а вредЪ. Впрочем я с тобой спорить не собираюсь. Для того, что бы отправить Get/Post нафиг не надо грузить всю страницу, причем каждый раз заного. Нравиться - пиши как вздумается. -
MetalFan © (09.12.07 15:04) [10]
> ИМХО не стоит так делать, и советы такие давать тоже!
+1
> Для того, что бы отправить Get/Post нафиг не надо грузить
> всю страницу, причем каждый раз заного.
и тащить с собой не легкий TWebBrowser.
Алгоритм примерно такой:
1. Смотришь любым HTTP debuggerom что шлет браузер
2. с пом любого HTTP клиента/набора функций (Indy, ICS, WinInet, WinHTTP) шлешь то же самое.
3. радуешьсо -
Lamer666 (09.12.07 17:30) [11]
> HTTP debuggerom
дай ссылку где скачать можно -
MetalFan © (09.12.07 18:39) [12]
-
MetalFan © (09.12.07 19:09) [13]хм. еле нашел бесплатный, но навороченный отладчик HTTP
http://www.fiddlertool.com/Fiddler2/version.asp -
tButton © (12.12.07 15:27) [14]
> Отправить на этот сайт нужным образом сформированный GET
> или POST http-запрос
а не подскажите как это реализовать на php?) -
MetalFan © (12.12.07 17:39) [15]форум вообщето посвящен делфи. вот на форуме пхпшников и спроси
-
tButton © (13.12.07 14:02) [16]извините
-
Lamer666 (13.12.07 17:55) [17]
> MetalFan
А МОЖНО ЛИ ПАРСИТЬ странички методами POST и GET? -
Anatoly Podgoretsky © (13.12.07 18:37) [18]> Lamer666 (13.12.2007 17:55:17) [17]
Они этим не занимаются и заниматься не могут. -
Lamer666 (14.12.07 08:37) [19]
> Anatoly Podgoretsky © (13.12.07 18:37) [18]
Спасибо!