PDA

Просмотр полной версии : нажать на кнопку и заполнить поле? [Delphi]


:::vertas:::
25.02.2008, 20:11
тема такая, на мэил.ру есть чаты, при заходе в любой чат появляется поле куда нужно ввести сообщение и кнопка "Отправить"
мне же нужно сделать програмно чтобы поле заполнялось и нажималась кнопка отправить через определенный промежуток времени, по сути это будет флудер.
Делфи:
Я поместил на форму компонент 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').Len gth = 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').Len gth = 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 ...

dos999
04.03.2008, 14:32
Зачем такие извращения ?
все тебе пишут , используй Post ...
какие извращения? С постом я уже разобрался...
просто вопрос был: "Как заполнить поле" вот я и выложил что то типа ответа...
чтобы если чё люди могли найти и посмотреть.