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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   нужна помощь delphi webbrowser (https://forum.antichat.xyz/showthread.php?t=138068)

woolfon 29.08.2009 11:01

нужна помощь delphi webbrowser
 
имеется код:
Код:

begin
 link:=WebBrowser1.OleObject.Document.getelementsbytagname('a');
 for i:=0 to link.length-1 do
 if pos('/addfriend?recall=',link.item(i).href)<>0 then link.item(i).click;
 end;

вообщем находит он 20 ссылок и пытается сразу кликнуть по всем, а мне надо чтобы кликнул по одной, страница обновилась кликнул по другой и т.д. пока не кончатся ссылки. помогите кто чем может) я сам ващпе не кодер!

=Zeus= 29.08.2009 16:23

попробуй использовать sleep(5000) в цикле. Это задержка выполнения следующей команды на 5 секунд.

HakaR 29.08.2009 16:36

Цитата:

Сообщение от =Zeus=
попробуй использовать sleep(5000) в цикле. Это задержка выполнения следующей команды на 5 секунд.

Если ставить sleep, вроде программа подвисать будет...

=Zeus= 29.08.2009 16:39

А Application.ProcessMessages для чего? Хотя наверно sleep() тут не лучщий вариант, пусть ТС попробует, будем знать.

mr. ZetRikS 29.08.2009 16:56

Application.ProcessMessages даёт приложению проработаться... то есть скорее всего он кликнет по всем ссылкам и потом даст загрузить последнюю...
нун после последней даст проработаться... так как клик по ссылке он обработает... из предложенного думаю как раз задержка (sleep(5000)) в 5 секунд и подойдёт...
Можно попробовать... блин... пока писал забыл чего хотел предложить...

Вот есть ещё такой вариант, создавать несколько объектов и в них грузить ссылки :)

slesh 29.08.2009 19:35

ппц народ вы гении. жжжоте
после первого же перехода автоматом похерятся остальыне ссылки.
Так что кидай во временный массив все ссылки.
А потом пробегайся по нему и грузи линки в WebBrowser и делай ожидания пока не наступит событие Complite

woolfon 31.08.2009 19:25

вообщем я копирую ссылки в listbox

Код:

begin
 link:=WebBrowser1.OleObject.Document.getelementsby tagname('a');
 for i:=0 to link.length-1 do
 if pos('http://mysite/index.php?recall=',link.item(i).href)<>0 then ListBox1.Items.Add(link.item(i).href);

end;

а как теперь осуществить переход по каждой ссылке?

akahaos 31.08.2009 19:47

for i:=0 to listbox1.items.count-1 do
WebBrowser1.navigate(listbox1.items[i]);

или не навигате там, лень делфю запускать, ну вобщем смысл понятен.
а чтобы он ждал пока первая загрузится и тока потом переходил к загрузке следущей делай так:

for i:=0 to listbox1.items.count-1 do begin
WebBrowser1.navigate(listbox1.items[i]);
while not complete do application.processmessage;

complete присваивай в true в событии браузера OnComplete или чето такое

M_script_ 31.08.2009 21:40

Немного оффтоп:
Application.ProcessMessages конечно, штука хорошая, но лучше всю работу с сетью вынеси в отдельный поток, не прописывай все в основном, чтобы прога не подвисала во время работы.

akahaos 31.08.2009 21:42

в его случае поток тут необязателен


Время: 05:59