Automatizar entrada de dados em website em delphi.

164 views
Skip to first unread message

josec...@absolutsistemas.com.br

unread,
Jul 12, 2023, 10:24:23 AM7/12/23
to dug...@googlegroups.com


  Bom dia,


  Eu tenho um sistema, que os clientes precisam se logar num sistema do governo, mais especificamente do ibama e lançar dados que estão no meu sistema.

  Eu gostaria de automatizar a entrada de dados do meu sistema direto nessa página de digitaçao da web.  


  Num encontro do dug-rs, acho q foi no colégio Dom Bosco, que eu estava presente,  alguém mostrou como fazer.


  Eu acredito que seja com o chromium delphi,  alguém tem como me indicar um material sobre esse assunto ? um exemplo ?


  Obrigado,

  José Carlos.


André Praeiro

unread,
Jul 13, 2023, 11:47:30 AM7/13/23
to dug...@googlegroups.com
Eu não conheço a referida apresentação do dug-rs.
Mas, tem várias formas de fazer isso. Isso vai depender da complexidade da página que vc tá querendo preencher.

Uma é usando uma bliblioteca http como Indy ou Synapse. Aí vc pega a página com http GET, faz o parse do web form com HTMLViewer ou ScrapWeb. E com o http POST vc envia os dados:

uses
  IdHTTP, IdHTTPWebBrokerBridge, IdFormData, IdURI, HtmlParser;

procedure FillAndSubmitForm;
var
  HTTP: TIdHTTP;
  Response: string;
  Form: TIdMultiPartFormDataStream;
  FormParser: THtmlParser;
  FormFields: THTMLElementList;
  Field: THTMLElement;
  SubmitUrl: string;
begin
  HTTP := TIdHTTP.Create(nil);
  try
    // Send an HTTP GET request to the webpage you want to automate
    Response := HTTP.Get('http://www.example.com/myform.html');

    // Parse the HTML content using HtmlParser
    FormParser := THtmlParser.Create(Response);
    try
      // Find the form element you want to fill in
      FormFields := FormParser.Document.GetElementsByTag('form');
      if FormFields.Count > 0 then
      begin
        // Get the form submission URL
        SubmitUrl := FormFields[0].Attribute['action'];

        // Create a TIdMultiPartFormDataStream to hold the form data
        Form := TIdMultiPartFormDataStream.Create;
        try
          // Find the form fields you want to fill in
          Field := FormFields[0].GetElementById('username');
          if Assigned(Field) then
            Form.AddFormField('username', 'myusername');

          Field := FormFields[0].GetElementById('password');
          if Assigned(Field) then
            Form.AddFormField('password', 'mypassword');

          // Send an HTTP POST request to submit the form
          HTTP.Post(SubmitUrl, Form);
        finally
          Form.Free;
        end;
      end;
    finally
      FormParser.Free;
    end;
  finally
    HTTP.Free;
  end;
end;


https://stackoverflow.com/questions/16231392/how-to-fill-a-web-form-inputs-using-delphi-xe3
https://en.delphipraxis.net/topic/2788-filling-and-submitting-a-form-programmatically-with-ics/
https://www.experts-exchange.com/questions/23201411/Fill-form-HTML-web-page-form-fields-and-submit-DELPHI.html
https://www.thoughtco.com/manipulate-web-forms-using-the-twebbrowser-1058362


Já com o Chromium Delphi (CEF4Delphi) pode até ficar mais simples, mas carrega mais recursos, pois é um chrome inteiro na sua aplicação:

uses
  ceflib, cefvcl;

procedure FillAndSubmitForm;
var
  Chromium: TChromium;
  Script: string;
begin
  Chromium := TChromium.Create(nil);
  try
    // Load the webpage you want to automate
    Chromium.Load('http://www.example.com/myform.html');

    // Execute JavaScript code to fill in the form fields and submit the form
    Script := 'document.getElementById("username").value = "myusername";' +
              'document.getElementById("password").value = "mypassword";' +
              'document.forms[0].submit();';
    Chromium.Browser.MainFrame.ExecuteJavaScript(Script, '', 0);
  finally
    Chromium.Free;
  end;
end;

https://github.com/salvadordf/CEF4Delphi
https://www.briskbard.com/index.php?lang=en&pageid=cef
https://www.safirmedya.com/en/blog/delphi-12/website-in-form-fill-sending-programs


Espero ter ajudado.

Andre Praeiro




--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 
Twitter: @dugrs
http://www.facebook.com/groups/dugrs/
http://www.Vimeo.com/dugrs
http://www.dug-rs.group/
---
You received this message because you are subscribed to the Google Groups "DUG-RS - Delphi Users Group Rio Grande do Sul" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dug-rs+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dug-rs/65047a8b62bb6c5297d97e1133b8d63c%40absolutsistemas.com.br.

josec...@absolutsistemas.com.br

unread,
Jul 13, 2023, 12:38:27 PM7/13/23
to dug...@googlegroups.com


   André,


Obrigado pelas dicas,  vou olhar o material que você mandou.

Reply all
Reply to author
Forward
0 new messages