нажать на кнопку и заполнить поле? [Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by :::vertas:::, 25 Feb 2008.

  1. :::vertas:::

    :::vertas::: Member

    Joined:
    12 Dec 2007
    Messages:
    19
    Likes Received:
    7
    Reputations:
    0
    тема такая, на мэил.ру есть чаты, при заходе в любой чат появляется поле куда нужно ввести сообщение и кнопка "Отправить"
    мне же нужно сделать програмно чтобы поле заполнялось и нажималась кнопка отправить через определенный промежуток времени, по сути это будет флудер.
    Делфи:
    Я поместил на форму компонент WebBrowser1, поле ввода и кнопку соответственно, но проблема оказалась не в этом...
    сколько я не пробовал заполнить програмно поля и давануть на кнопку ничего не вышло...
    Если кто поможет буду благодарен :)

    вот собственно теги страницы http://chat.mail.ru/ (в любом чате):
    меня интересует
    <input class="discuss" type="text" name="txtr" id="txtr" value="">
    <input id=sendbtn type="submit" value="Отправить" onmousemove="window.status='Отправить'">

    кому интересно зайдите в любой чат мэил ру и посмотрите html код.
     
    #1 :::vertas:::, 25 Feb 2008
    Last edited: 25 Feb 2008
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Нужно сделать POST запрос. Вот статья с примерами, там есть пример пост запроса на дельфи: http://forum.sysman.ru/index.php?showtopic=12171
     
    _________________________
    5 people like this.
  3. :::vertas:::

    :::vertas::: Member

    Joined:
    12 Dec 2007
    Messages:
    19
    Likes Received:
    7
    Reputations:
    0
    мдя... но это не то
    нужно чтобы визуально в компоненте WebBrowser1 заполнилось поле, после чего также нажалась кнопка

    то что в статье написано я десяток раз сам делал это понятно

    нужно сделать примерно чтото типа этого:

    WebBrowser1.oleobject.document.getelementsbyid('txtr').item(0).Value:=Edit8.Text+Edit9.Text;
    WebBrowser1.oleobject.document.getelementsbyid('sendbtn').item(0).Click;

    только вот как???
    этот пример не работает сколько я не пробовал, даже меняя item на 1,2, 3, 4 ничего не происходит.
     
    1 person likes this.
  4. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Програмно открываешь браузер с нужной страницей, програмно передвигаешь мышку на текстовое поле, програмный клик => Поле становится активным, Прогамное нажатие клавишь, соответсвенно тексту, програмное передвижение мыши на кнопку програмный клик...
     
    1 person likes this.
  5. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    ПОСТ запрос, как сказал Kaimi, это самый оптимальный вариант. Читай хтмл-страницу, что получил. Ищи там форму ввода, а потом оправляй ПОСТ запрос.
     
  6. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    есле нужно визуально, запиши видео, воспроизведи его и в нужный момент отправь http пакет
     
  7. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    post запрос, либо грей руки об клаву, придется много извращаться...
     
  8. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    :::vertas:::, Kaimi направил тебя на отличную статью.....
    Там все есть.....Или тебе нужен готовый исходник?????
    Если не сложно выложи что ты сам пытался делать....Поглядеть интересно...
     
  9. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    Code:
    function TForm1.ByName(FieldName: string; Value: string): Boolean;
     var
       i, j: Integer;
       FormItem: Variant;
    begin
     Result := False;
    if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
     begin
       Exit;
     end;
    for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
     begin
       FormItem := WebBrowser.OleObject.Document.forms.Item(I);
       for j := 0 to FormItem.Length - 1 do
       begin
         try
         if FormItem.Item(j).Name = FieldName then
           begin
             if Value = 'Click' then
               FormItem.Item(j).Click
             else
               FormItem.Item(j).Value := Value;
             Result := True;
           end;
         except
           Exit;
         end;
       end;
     end;
    end;
    
    function TForm1.ByImg(Src: string; Value: string): Boolean;
     var
       i, j: Integer;
       FormItem: Variant;
    begin
     Result := False;
    if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
     begin
       Exit;
     end;
    for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
     begin
       FormItem := WebBrowser.OleObject.Document.forms.Item(I);
       for j := 0 to FormItem.Length - 1 do
       begin
         try
         if FormItem.Item(j).Src = Src then
           begin
             if Value = 'Click' then
               FormItem.Item(j).Click
             else
               FormItem.Item(j).Value := Value;
             Result := True;
           end;
         except
           Exit;
         end;
       end;
     end;
    end; 
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      //заполняем поля на яндексе
      WebBrowser.Navigate('http://mail.yandex.ru/');
      ByName('login', 'uzver');
      ByName('passwd', 'pas123');
      ByImg('http://img.yandex.net/wmi/classic/static/7/i/tb/i24-new-msg.gif', 'Click'); //в результате этой функции произведёться клик по картинке с данным именем файла
    end;
    
    
    c нажатием кнопок всё немного посложнее, т.к. кнопки не вегда имеют имена.

    Ну и конечно обязательно ложка дёгтя =)) разработчики из майкрософта сделали недоступной функцию SetVal для полей типа file т.е. им нельзя задать значение... вот такое вот западло, так что письмо с аттачем подобным образом не отправишь :'(
     
  10. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    Зачем такие извращения ?
    все тебе пишут , используй Post ...
     
    2 people like this.
  11. dos999

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    какие извращения? С постом я уже разобрался...
    просто вопрос был: "Как заполнить поле" вот я и выложил что то типа ответа...
    чтобы если чё люди могли найти и посмотреть.
     
    1 person likes this.