como dar enter no webbrowser

Delphi

10/12/2004

como dar enter no webbrowser

nas paginas da internet quando nos preenchemos augum formulario e damos enter ele faz a pesquisa ou cadastro automaticamente sem precisar clicar no botao para tal fim. so que essas paginas no webbrowser nao funciona com o enter temos que clicar no botao. sera que tem jeito de fazer com que a pagina no webbrowser funcione com o enter?


Flaviocont

Flaviocont

Curtidas 0

Respostas

Flaviocont

Flaviocont

10/12/2004

sobe


GOSTEI 0
Rodc

Rodc

10/12/2004

Flávio,
Você conseguiu resolver o sel problema? Também estou precisando.
Grato,

Rodrigo Cesar


GOSTEI 0
Massuda

Massuda

10/12/2004

Não tem como ´dar um enter´ no navegador... no caso de formulários em páginas da web, o modo de fazer um preenchimento automático seria usar um TIdHttp (por exemplo) e usar o método usado no formulário, usar TIdHttp.Post ou TIdHttp.Get para enviar os dados e obter a resposta do servidor.

Sei que a explicação é vaga, mas se você puder passar mais detalhes talvez seja possível explicar melhor.


GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda bom dia.

massuda dessa maneira q vc faz so preenche o formulario ou vc consegue dar o para ele dar a resposta do formulario?

se vc conseguiu uma maneira do formulario te da a resposta sem precissar dar enter no botao e poder me da uma dica vai ser muito util pra mim.

é que eu preencho os formularios e ate dou o click no botao automaticamente usando o webbrowser. so que tem uma pagina que eu nao consegui nem preencher nem dar o click no botao.

se vc poder me dar uma dica ou um exemplo com esse componente q vc usa vai me ajudar muito.


GOSTEI 0
Massuda

Massuda

10/12/2004

Não sei se era isso que você estava esperando, mas vai aí dois exemplos...

O primeiro exemplo mostra como simular o envio de dados de um web form que usa o método GET (os dados vão numa URL, como por exemplo, o site do Google):
type
  TMeuForm = class(TForm)
    // ...
    httpCliente: TIdHTTP;
    // ...
   function BuscaNoGoogle(PalavraChave: string): string

// ...

// Busca no Google pela PalavraChave.
// Retorna a página gerada pelo Google.

function TMeuForm.BuscaNoGoogle(PalavraChave: string): string
var
    Resposta: TStringStream;
begin
    Resposta := TStringStream.Create(´´);
    try
        httpCliente.Get(´http://www.google.com/search?q=´ + PalavraChave, Resposta);

        Result := Resposta.DataString;
    finally
        Resposta.Free;
    end;
end;


O segundo exemplo mostra como simular o envio de dados de um web form que usa o método POST (os dados vão nos cabeçalhos HTTP, como por exemplo, a página de pesquisa deste fórum):
type
  TMeuForm = class(TForm)
    // ...
    httpCliente: TIdHTTP;
    // ...
   function BuscaNoClubeDelphi(PalavraChave: string): string

// ...

// Busca no ClubeDelphi pela PalavraChave.
// Retorna a página gerada pelo ClubeDelphi.

function TMeuForm.BuscaNoClubeDelphi(PalavraChave: string): string
var
    Argumentos: TStringList;
begin
    Argumentos := TStringList.Create;
    try
        Argumentos.Add(´search_keywords=´ + PalavraChave);
        Argumentos.Add(´search_terms=all´);
        //Argumentos.Add(´search_author=´);

        Result := httpCliente.Post(´http://delphiforum.icft.com.br/forum/search.php?mode=results´, Argumentos);
    finally
        Argumentos.Free;
    end;
end;


Nos dois exemplos é retornada uma string que contem a página HTML recebida em resposta aos dados que enviamos.

O problema maior é determinar como enviar os dados... acho que a forma mais simples é dar uma olhada no código HTML da página e determinar quais dados o web form está capturando. Aliás, o jeito mais fácil de determinar qual o método de envio dos dados é dar uma olhada no código HTML da página.


GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda achei interesante a sua segunda funcao que usa o post eu acho que ela pode me ajudar no que eu precisso. mas eu nao consegui compilar, ela da esse erros

[Error] Unit1.pas(49): There is no overloaded version of ´Post´ that can be called with these arguments
[Fatal Error] Project1.dpr(5): Could not compile used unit ´Unit1.pas´

acho q eu coloquei aguma coisa fora do lugar eu coloquei assim

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;

type

TForm1 = class(TForm)

Button1: TButton;


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
httpCliente: TIdHTTP;

implementation

{$R *.dfm}


// function BuscaNoClubeDelphi(PalavraChave: string): string

// ...

// Busca no ClubeDelphi pela PalavraChave.
// Retorna a página gerada pelo ClubeDelphi.

function BuscaNoClubeDelphi(PalavraChave: string): string;
var
Argumentos: TStringList;
begin
Argumentos := TStringList.Create;
try
Argumentos.Add(´search_keywords=´ + PalavraChave);
Argumentos.Add(´search_terms=all´);
//Argumentos.Add(´search_author=´);

Result:=httpCliente.Post(´http://delphiforum.icft.com.br/forum/search.php?mode=results´, Argumentos);



finally

Argumentos.Free;
end;
end;



end.


GOSTEI 0
Massuda

Massuda

10/12/2004

[...] mas eu nao consegui compilar, ela da esse erros [Error] Unit1.pas(49): There is no overloaded version of ´Post´ that can be called with these arguments [Fatal Error] Project1.dpr(5): Could not compile used unit ´Unit1.pas´
Acho que é diferença de versão do Indy; o Indy que uso é uma versão recente (9.0.14)... qual a sua versão?

acho q eu coloquei aguma coisa fora do lugar eu coloquei assim [...]
Eu coloquei um TIdHTTP (que renomeei para httpCliente), um TButton e um TMemo dentro do form, fiz BuscaNoClubeDelphi ser uma função do form e no tratador do OnClick do botão usei BuscaNoClubeDelphi para preencher o TMemo.

Ficou assim:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;

type

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    httpCliente: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    function BuscaNoClubeDelphi(PalavraChave: string): string
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Busca no ClubeDelphi pela PalavraChave.
// Retorna a página gerada pelo ClubeDelphi.

function TForm1.BuscaNoClubeDelphi(PalavraChave: string): string;
var
  Argumentos: TStringList;
begin
  Argumentos := TStringList.Create;
  try
    Argumentos.Add(´search_keywords=´ + PalavraChave);
    Argumentos.Add(´search_terms=all´);
    //Argumentos.Add(´search_author=´);

    Result:=httpCliente.Post(´http://delphiforum.icft.com.br/forum/search.php?mode=results´, Argumentos);

  finally
    Argumentos.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
  Memo1.Lines.Add(BuscaNoClubeDelphi(´Teste´));
end;

end.



GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda a versao do meu e 8.0.25

onde vc conseguiu essa versao nova? tem como conseguir?


GOSTEI 0
Massuda

Massuda

10/12/2004

onde vc conseguiu essa versao nova? tem como conseguir?
Você pode baixar a versão mais recente do Indy no site [url=http://www.indyproject.org/]Indy Project[/url] (mais epecificamente, neste [url=http://www.indyproject.org/download/Files/Indy9.iwp]link[/url]). É recomendável usar a versão 9.0.18.

Antes de instalar essa versão, você vai ter que desinstalar a versão antiga.


GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda me desculpa por esta ti incomodando tanto.

eu baixei o versao nova

mas eu nao tenho costume de instalar componentes e estou perdido aqui pois nao sei desinstalar a versao antiga. teria como vc me ajudar? :oops:

a versao nova eu acho que consigo instalar mas desinstalar nao sei como


GOSTEI 0
Massuda

Massuda

10/12/2004

mas eu nao tenho costume de instalar componentes e estou perdido aqui pois nao sei desinstalar a versao antiga.
Na página de onde você baixou o Indy (neste [url=http://www.indyproject.org/download/Files/Indy9.iwp]link[/url]) tem as instruções sobre como remover o Indy8 na seção [b:18a2f96c80]Delphi 6 & 7 Specific Notes[/b:18a2f96c80].


GOSTEI 0
Nerdex

Nerdex

10/12/2004

Isto também poderá ajudar...
Pressionando um certo button de um TWebbrowser mesmo existindo vários diferentes:

procedure TForm1.Button2Click(Sender: TObject);
var 
ovElements: OleVariant;
i: Integer; 
begin 
ovElements := ie.OleObject.Document.forms.item(0).elements;
for i := 0 to ovElements.Length -1 do
begin
if (ovElements.item(i).tagName = ´INPUT´)
and (ovElements.item(i).type = ´submit´)
and (ovElements.item(i).Value = ´Google seach´) then
begin
ovElements.item(i).Click;
break;
end;
end;
end;



GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

Nerdex boa noita. achei interesante sua rotina mas tem como essa rotina funcionar nesta pagina http://www.sintegra.sefaz.pe.gov.br

pois eu ja tentei com os trez butoes que tem nela e nao funcionou nao sei se fiz auguma coisa errada.


GOSTEI 0
Nerdex

Nerdex

10/12/2004

Dá um conferida no cód. fonte da pág. de repente tu pega os dados corretos relativo aos botões... Acredito que deves utilizar o parâmetro value para este item do OLEVariant...

Sem mais no momento... agradeço a compreenção de todos...


GOSTEI 0
Nerdex

Nerdex

10/12/2004

Ou me lança em OFF por Msg Particular um exemplo contendo 3 valores para eu ativar isto para você...


GOSTEI 0
Massuda

Massuda

10/12/2004

Esta é uma função que pode ser usada para usar o form de consulta por IE do SINTEGRA da SEFAZ/PE:
function TMeuForm.BuscaPorIE(IE: string): string 
var 
  Argumentos: TStringList; 
begin 
  Argumentos := TStringList.Create; 
  try 
    Argumentos.Add(´SALVO_InfoRule=sintegra_conecta(IE,´´IE´´)); 
    Argumentos.Add(IE=´ + IE); 

    Resposta := httpCliente.Post(
      ´http://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/sintegra/sintegra.htm´,
      Argumentos);
  finally 
    Argumentos.Free; 
  end; 
end;



GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda boa tarde.

massuda deu um problema quando vou compilar essa duas linhas eu acho que é devido a aspa

Argumentos.Add(´SALVO_InfoRule=sintegra_conecta(IE,´´IE´´));
Argumentos.Add(IE=´ + IE);

na segunda linha eu consertei a aspa assim
Argumentos.Add(´IE=´ + IE);

mas na primeira linha eu nao sei onde colocar a aspa para que compile certo.


GOSTEI 0
Massuda

Massuda

10/12/2004

massuda boa tarde. massuda deu um problema quando vou compilar essa duas linhas eu acho que é devido a aspa Argumentos.Add(´SALVO_InfoRule=sintegra_conecta(IE,´´IE´´));
Essa linha deve ser
Argumentos.Add(´SALVO_InfoRule=sintegra_conecta(IE,´´IE´´)´);
A aspa qeu falta está entre os dois fecha parenteses. Bom... acho que agora vai dar certo!


GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda boa noite.

massuda o negocio funcionou.

mas agora fiquei com algumas duvidas: como eu faço para isso funcionar com uma pagina com mais de um campo para preencher? exemplo: esta pagina para emitir dae
https://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/dae10/dae_entra.htm

eu vi que no código fonte depois do método post tem

<form method=´POST´ name=´TstFocus´ ONSUBMIT=´return Criticar()´>
<input type=´hidden´ name=´SALVO_InfoRule´
value=´sfar_emissdae(vbTipoEmiss, vbTipoIdent, InscEst, vbRazao, vbCodMun, cbNatureza, vbMesFiscal, vbAnoFiscal, Valor, TipoDoc, NumDoc, Venc, Pagto, ValImp, ValMul, ValJur, ValTot, vbParcela, Observ1, NumDAE, QtdeSelo, NumAIDF)´><input

onde eu acho que deve ficar assim mas não tenho certeza

Argumentos.Add(´SALVO_InfoRule=sfar_emissdae(vbTipoEmiss, vbTipoIdent, InscEst, vbRazao, vbCodMun, cbNatureza, vbMesFiscal, vbAnoFiscal, Valor, TipoDoc, NumDoc, Venc, Pagto, ValImp, ValMul, ValJur, ValTot, vbParcela, Observ1, NumDAE, QtdeSelo, NumAIDF)´);

Argumentos.Add(´vbTipoEmiss= ´+ vbTipoEmiss);
Argumentos.Add(´vbTipoIdent= ´+ vbTipoIdent);
Argumentos.Add(´vbRazao= ´+ vbRazao);
Argumentos.Add(´vbCodMun= ´+ vbCodMun);
Argumentos.Add(´cbNatureza= ´+ cbNatureza);...
E assim ate o ultimo campo.

Ate aqui eu acho que to fazendo certo.
Mas como eu faço para colocar os valores destes campos?
E a url seria esta?
Resposta := httpCliente.Post(´ https://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/dae10/dae_entra.htm ´, Argumentos);

Eu achei interessante no exemplo anterior que eu passei para você a pagina http://www.sintegra.sefaz.pe.gov.br/
E a resposta ficou Resposta := httpCliente.Post(
´http://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/sintegra/sintegra.htm´,
Argumentos);
Eu tentei encontrar essa url no codigo fonte da pagina http://www.sintegra.sefaz.pe.gov.br/ e não encontrei.
Como você conseguiu essa url para colocar na resposta?


GOSTEI 0
Massuda

Massuda

10/12/2004

como eu faço para isso funcionar com uma pagina com mais de um campo para preencher? exemplo: esta pagina para emitir dae [...] eu vi que no código fonte depois do método post tem[...] <form method=´POST´ name=´TstFocus´ ONSUBMIT=´return Criticar()´> <input type=´hidden´ name=´SALVO_InfoRule´ value=´sfar_emissdae(vbTipoEmiss, [...] onde eu acho que deve ficar assim mas não tenho certeza Argumentos.Add(´SALVO_InfoRule=sfar_emissdae(vbTipoEmiss,[...]
É isso mesmo.

Argumentos.Add(´vbTipoEmiss= ´+ vbTipoEmiss); [...] E assim ate o ultimo campo. Ate aqui eu acho que to fazendo certo. Mas como eu faço para colocar os valores destes campos?
Nos campos marcados como[list:2b2f0de52c][*:2b2f0de52c][b:2b2f0de52c]input type=´hidden´[/b:2b2f0de52c], o nome do parâmetro está em [b:2b2f0de52c]name[/b:2b2f0de52c], enquanto o valor está em [b:2b2f0de52c]value[/b:2b2f0de52c][*:2b2f0de52c][b:2b2f0de52c]input type=´text´[/b:2b2f0de52c], o nome do parâmetro está em [b:2b2f0de52c]name[/b:2b2f0de52c], enquanto o valor você de fornecer (esses são os campos para digitar no webform)[*:2b2f0de52c][b:2b2f0de52c]select[/b:2b2f0de52c], o nome do parâmetro está em [b:2b2f0de52c]name[/b:2b2f0de52c], enquanto o valor está no [b:2b2f0de52c]value[/b:2b2f0de52c] do [b:2b2f0de52c]option[/b:2b2f0de52c] desejado (esses são os radio buttons do webform)[/list:u:2b2f0de52c]Acho que isso já dá resolve seu problema, pelo menos com essa página.

E a url seria esta? [...]
Sim.

Eu achei interessante no exemplo anterior que eu passei para você a pagina [...] Como você conseguiu essa url para colocar na resposta?
A página da SEFAZ/PE que você passou usa frames... para saber a URL da página com o webform, eu só dei um clique com o botão direito no webform e dei uma olhada nas propriedades da página (uso Internet Explorer, em outros navegadores o procedimento pode ser diferente).


GOSTEI 0
Flaviocont

Flaviocont

10/12/2004

massuda boa noite.

massuda estou mas uma vez precissando de sua grande ajuda.

fiz uma funcao p essa pagina https://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/dae10/Consulta_dae_sim.htm
mas esta dando o seguinte erro (IOHandler value is not valid.) quando eu clico o botao. o que sera que eu fiz de errado?
se voçê poder me ajudar vou ficar agradecido mas uma vez.




function TForm1.DebitoSim(InscEst, Mesfiscal, Anofiscal : string): string;
var
Argumentos: TStringList;
begin
Argumentos := TStringList.Create;
try

Argumentos.Add(´SALVO_InfoRule=sfsm_dae_sim(InscEst,Mesfiscal,Anofiscal)´);
Argumentos.Add(´InscEst=´ + InscEst);
Argumentos.Add(´Mesfiscal=´ + Mesfiscal);
Argumentos.Add(´Anofiscal=´ + Anofiscal);

Result := HTTP.Post
(´https://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/dae10/Consulta_dae_sim.htm´, Argumentos);
finally
Argumentos.Free;
end;
end;



no click buton
Memo1.Lines.Clear;
Memo1.Lines.Add(DebitoSim(´18.3.905.0234976-1´,´12´,´2004´));


GOSTEI 0
Massuda

Massuda

10/12/2004

fiz uma funcao p essa pagina https://www.sefaz.pe.gov.br/... mas esta dando o seguinte erro (IOHandler value is not valid.)
Está dando problema porque o site usa https ao invés de http. Para resolver isso, faça o seguinte:[list:e4be27599f][*:e4be27599f]Abra o site [url=http://indy.fulgan.com/SSL/]indy.fulgan.com/SSL[/url][*:e4be27599f]Baixe o arquivo indy_OpenSSL096m.zip[*:e4be27599f]Deszipe esse arquivo em qualquer pasta/diretório.[*:e4be27599f]Copie/mova as duas DLLs para a pasta/diretório onde está seu programa.[/list:u:e4be27599f]No seu projeto Delphi, faça o seguinte:[list:e4be27599f][*:e4be27599f]No mesmo form onde está o componente TIdHTTP, inclua um componente [b:e4be27599f]TIdSSLIOHandlerSocket[/b:e4be27599f] (está na aba Indy I/O Handlers)[*:e4be27599f]Usando o Object Inspector, atribua à propriedade [b:e4be27599f]IOHandler[/b:e4be27599f] do TIdHTTP o TIdSSLIOHandlerSocket recém colocado no form.[*:e4be27599f]Recompile seu programa[/list:u:e4be27599f]Você terá que incluir na instalação do seu programa as duas DLLs que você baixou (libeay32.dll e ssleay32.dll).


GOSTEI 0
Japa_h

Japa_h

10/12/2004

Alguem pode me ajudar para obter a URL e adptar a função para os Estados MG,RJ,ES.

function TMeuForm.BuscaPorIE(IE: string): string
var
Argumentos: TStringList;
begin
Argumentos := TStringList.Create;
try
Argumentos.Add(´SALVO_InfoRule=sintegra_conecta(IE,´´IE´´));
Argumentos.Add(IE=´ + IE);

Resposta := httpCliente.Post(
´http://www.sefaz.pe.gov.br/cgi-bin/sefaznet.dll/sintegra/sintegra.htm´,
Argumentos);
finally
Argumentos.Free;
end;
end;


GOSTEI 0
Lucaoliveira

Lucaoliveira

10/12/2004

Pessoal, estou precisando de algo mais ou menos nessa linha. O que ocorre comigo é que acesso um site e aparece um formulário pequeno, pedindo usuário e senha, como se fosse logar para entrar em skype ou messenger da vida.
Eu queria fazer o seguinte, preencher automaticamente esse formulário web com os dados já previamente gravados na minha base. Facilitando a vida do usuário em ter que toda vez colocar o usuario e senha.

Grato.


GOSTEI 0
POSTAR