Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   нажать на кнопку и заполнить поле? [Delphi] (https://forum.antichat.xyz/showthread.php?t=62746)

:::vertas::: 25.02.2008 20:11

нажать на кнопку и заполнить поле? [Delphi]
 
тема такая, на мэил.ру есть чаты, при заходе в любой чат появляется поле куда нужно ввести сообщение и кнопка "Отправить"
мне же нужно сделать програмно чтобы поле заполнялось и нажималась кнопка отправить через определенный промежуток времени, по сути это будет флудер.
Делфи:
Я поместил на форму компонент 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 код.

Kaimi 25.02.2008 20:48

Нужно сделать POST запрос. Вот статья с примерами, там есть пример пост запроса на дельфи: http://forum.sysman.ru/index.php?showtopic=12171

:::vertas::: 25.02.2008 23:09

мдя... но это не то
нужно чтобы визуально в компоненте WebBrowser1 заполнилось поле, после чего также нажалась кнопка

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

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

WebBrowser1.oleobject.document.getelementsbyid('tx tr').item(0).Value:=Edit8.Text+Edit9.Text;
WebBrowser1.oleobject.document.getelementsbyid('se ndbtn').item(0).Click;

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

bul.666 25.02.2008 23:11

Програмно открываешь браузер с нужной страницей, програмно передвигаешь мышку на текстовое поле, програмный клик => Поле становится активным, Прогамное нажатие клавишь, соответсвенно тексту, програмное передвижение мыши на кнопку програмный клик...

presidentua 26.02.2008 02:48

Цитата:

мдя... но это не то
нужно чтобы визуально в компоненте WebBrowser1 заполнилось поле, после чего также нажалась кнопка
ПОСТ запрос, как сказал Kaimi, это самый оптимальный вариант. Читай хтмл-страницу, что получил. Ищи там форму ввода, а потом оправляй ПОСТ запрос.

nc.STRIEM 26.02.2008 11:34

есле нужно визуально, запиши видео, воспроизведи его и в нужный момент отправь http пакет

W!z@rD 26.02.2008 12:48

post запрос, либо грей руки об клаву, придется много извращаться...

De-visible 01.03.2008 21:16

:::vertas:::, Kaimi направил тебя на отличную статью.....
Там все есть.....Или тебе нужен готовый исходник?????
Если не сложно выложи что ты сам пытался делать....Поглядеть интересно...

dos999 04.03.2008 12:33

Код:

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 т.е. им нельзя задать значение... вот такое вот западло, так что письмо с аттачем подобным образом не отправишь :'(

Jes 04.03.2008 13:56

Зачем такие извращения ?
все тебе пишут , используй Post ...


Время: 04:16