GARANTIR DESCONTO

Fórum Duvida WebBrowser com vetor delphi 7 #535913

29/10/2015

0

Tenho um vetor de 50 posições do tipo string que armazenam links de sites, gostaria de saber como faço pra fazer com que a cada 5 segundos o Webbrowser entre em cada site que está em cada posição do vetor, sendo que eu ja consegui implementar o código pra o Webbrowser acessar ao menos 1 posição do vetor, só está faltando pra conseguir acessar todas posições uma após a outra a cada 5 segundos. Obrigado.
Alex

Alex

Responder

Posts

29/10/2015

Mateus Ribeiro

Bom dia!

Veja se é isso.

var i: integer;
begin

  for i:= 0 to Length(SeuVetor) do
    begin
      WebBrowser.Navigate(SeuVetor[i]);
      Sleep(5000); // Aguarda 5 segundos
    end;
Responder

Gostei + 0

29/10/2015

Alex

Bom dia, fiz os passos acima citado, mas o webbrowser so carrega o link da ultima posição do vetor, ou seja apenas a posição 50, as demais o link não é carregado
Responder

Gostei + 0

29/10/2015

Mateus Ribeiro

Bom... do jeito que passei, todos os sites no seu vetor são acessados, porém ele não aguarda o carregamento da página de nenhum, ai fica indo para o próximo sem parar. O ideal é vc acessar uma pagina, esperar o carregamento dela e então aguardar 5 segundos para a próxima do vetor. Se for assim, segue o método.

Declare as variáveis globais:
var 
  Form1: TForm1; 

  CurDispatch: IDispatch; 
  FDocLoaded: Boolean; 

implementation


Agora, nos eventos do seu WebBrowser coloque...
No evento OnBeforeNavigate:
CurDispatch := nil; 
FDocLoaded := False;



No evento OnDocumentComplete:
if (pDisp = CurDispatch) then 
    begin 
      FDocLoaded := True; 
      CurDispatch := nil; 
    end;



No evento OnNavigateComplete2:
if CurDispatch = nil then 
    CurDispatch := pDisp;


Agora, seguindo o código que passei anteriormente, fica assim:
var i: integer; 
begin 
  
  for i:= 0 to Length(SeuVetor) do 
    begin 
      WebBrowser.Navigate(SeuVetor[i]); 
      repeat Application.ProcessMessages until FDocLoaded; //Depois de acessar a página, espera ela carregar 
      Sleep(5000); // Aguarda 5 segundos 
    end;



Espero que ajude! Poste qualquer dificuldade
Responder

Gostei + 0

29/10/2015

Alex

Obrigado mano, resolveu aqui, era exatamente isso que eu queria... Mas aproveitando o embalo da conversa sem querer abusar é claro, deixa eu fazer uma pergunta rápida, Como eu faria pra fazer uma variavel pesquisar uma determinada frase(string) na página que abriu, antes que os 5 segundos termine?

Exemplo: tenho a variavel nome do tipo string; e ela guarda a frase ' você é bonito(a)' e dai essa variavel pesquisar essa string na página que abriu, antes que os 5 segundos termine, se ela achar o valor na página ela pausa o vetor, se não, ela continua procurando até o ultimo link do vetor...
Responder

Gostei + 0

29/10/2015

Mateus Ribeiro

Entendi, é bastante simples fazer isso que vc quer amigo... o método que me veio a cabeça é obter o HTML do navegador e verificar se essa palavra existe lá!
Basicamente isso:

Declare essa função:
function GetWebBrowserHTML(const WebBrowser: TWebBrowser): String;
var
  LStream: TStringStream;
  Stream : IStream;
  LPersistStreamInit : IPersistStreamInit;
begin
  if not Assigned(WebBrowser.Document) then exit;
  LStream := TStringStream.Create('');
  try
    LPersistStreamInit := WebBrowser.Document as IPersistStreamInit;
    Stream := TStreamAdapter.Create(LStream,soReference);
    LPersistStreamInit.Save(Stream,true);
    result := LStream.DataString;
  finally
    LStream.Free();
  end;
end;


Depois, implementando na função que eu tinha te passado antes:
var i: integer; 
      Nome, xHTML: String;
begin 

  Nome:= 'Você é bonito(a)';
   
  for i:= 0 to Length(SeuVetor) do
    begin 
      WebBrowser.Navigate(SeuVetor[i]); 
      repeat Application.ProcessMessages until FDocLoaded; //Depois de acessar a página, espera ela carregar 
      
      xHTML:= GetWebBrowserHTML(WebBrowser1); // Obtendo o código HTML da página atual
      if Pos(Nome, xHTML)<> 0 then // Verifica se no HTML existe o valor da variável NOME
         Break; // Se existir, para o contador e permanece na página      
      
      Sleep(5000); // Aguarda 5 segundos 
    end;
Responder

Gostei + 0

29/10/2015

Alex

Obrigado amigo, sanou minhas dúvidas... tenha uma boa tarde...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar