Конференция "Сети" » Автоматическая отправка данных форм [D7, WinXP]
 
  • 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]

    Спасибо!
 
Конференция "Сети" » Автоматическая отправка данных форм [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.002]