Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com fazer login!


AnimesBR

Pergunta

Boa Tarde, eu estou criando um programa e estou com uma dúvida.

Gostaria de saber se existe alguma maneira e fazer login em um site apartir do delphi.

Exemplo:

No meu programa o usuário digita o username e a senha, e abre uma página da internet (vou usar como exemplo o forum), e com o user e senha digitados conecta no site.

Será que é possível fazer isso?

Agradeço desde já, Obrigado.

Procurei no Google mais não consiguir achar nada. :(

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
No meu programa o usuário digita o username e a senha, e abre uma página da internet (vou usar como exemplo o forum), e com o user e senha digitados conecta no site.

Será que é possível fazer isso?

É possivel, mas voce terá que usar o componente Webbrowser do delphi .... que através dele será chamada a pagina que voce quer submeter os dados digitados pelo programa.

Neste exemplo que achei na internet, o cara quer transportar o CNPJ e o CPF para a pagina da receita ... estude o codigo e faça as modificações que necessarias para o seu uso.

unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, OleCtrls, SHDocVw, MSHTML, StdCtrls,shellapi, Buttons; 

type 
  TForm1 = class(TForm) 
    GroupBox1: TGroupBox; 
    LabelCNPJ: TLabel; 
    LabelCPF: TLabel; 
    LabelNR_Proc: TLabel; 
    EdtCNPJ: TEdit; 
    EdtCPF: TEdit; 
    EdtNr_Proc: TEdit; 
    BtnEnviar: TButton; 
    GroupBox2: TGroupBox; 
    WebBrowser1: TWebBrowser; 
    procedure BtnEnviarClick(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 
function ExecuteScript(doc: IHTMLDocument2; script: string; language: string): Boolean; 
var 
  win: IHTMLWindow2; 
  Olelanguage: Olevariant; 
begin 
  if doc <> nil then 
  begin 
    try 
      win := doc.parentWindow; 
      if win <> nil then 
      begin 
        try 
          Olelanguage := language; 
          win.ExecScript(script, Olelanguage); 
        finally 
          win := nil; 
      end; 
  end; 
  finally 
  doc := nil; 
  end; 
end; 
end; 

procedure FillInGMXFormsCNPJ(WB: ShDocVW.IWebbrowser2; IDoc1: IHTMLDocument2; 
Document: Variant; P_CNPJ : string); 
const 
IEFields: array[1..2] of string = ('INPUT', 'text'); 
var 
  IEFieldsCounter: Integer; 
  i: Integer; 
  m: Integer; 
  ovElements: OleVariant; 
begin 
  if Pos('Receita Federal', Document.Title) <> 0 then 
   while WB.ReadyState <> READYSTATE_COMPLETE do 
     Application.ProcessMessages; 
     // contar os elementos e interagir por suas formas 
     IEFieldsCounter := 0; 
     for m := 0 to Document.forms.Length - 1 do 
     begin 
       ovElements := Document.forms.Item(m).elements; 
       // interagir por elemento 
     try 
       // preencher os campos 
       if (ovElements.item(0).tagName = IEFields[1]) and 
          (ovElements.item(0).type = IEFields[2]) then 
       begin 
         ovElements.item(0).Value := P_CNPJ; 
         Inc(IEFieldsCounter); 
       end; 
     except 
     // falha... 
     end; 
  end; 
  // se o campo estiver preenchido. 
  if IEFieldsCounter = 3 then ExecuteScript(iDoc1,'','JavaScript'); 
end; 

{procedure FillInGMXFormsCPF(WB: ShDocVW.IWebbrowser2; IDoc1: IHTMLDocument2; 
Document: Variant; P_CPF : string); 
const 
IEFields: array[1..2] of string = ('INPUT', 'text'); 
var 
  IEFieldsCounter: Integer; 
  i: Integer; 
  m: Integer; 
  ovElements: OleVariant; 
begin 
  if Pos('Receita Federal', Document.Title) <> 0 then 
   while WB.ReadyState <> READYSTATE_COMPLETE do 
     Application.ProcessMessages; 
     // contar os elementos e interagir por suas formas 
     IEFieldsCounter := 0; 
     for m := 0 to Document.forms.Length - 1 do 
     begin 
       ovElements := Document.forms.Item(m).elements; 
       // interagir por elemento 
     try 
       // preencher os campos 
       if (ovElements.item(0).tagName = IEFields[1]) and 
          (ovElements.item(0).type = IEFields[2]) then 
       begin 
         ovElements.item(0).Value := P_CPF; 
         Inc(IEFieldsCounter); 
       end; 
     except 
     // falha... 
     end; 
  end; 
  // se o campo estiver preenchido. 
  if IEFieldsCounter = 3 then ExecuteScript(iDoc1,'','JavaScript'); 
end;} 

procedure TForm1.BtnEnviarClick(Sender: TObject); 
var 
  IDoc1: IHTMLDocument2; 
  Web: ShDocVW.IWebBrowser2; 
  VEdtCNPJ, VEdtCPF : String; 
begin 
  Webbrowser1.Navigate('https://www8.receita.fazenda.gov.br/SimplesNacional/controleacesso/autentica.aspx?id=5'); 
  while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do 
    Application.ProcessMessages; 
    Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1); 
    Web := WebBrowser1.ControlInterface; 
    vEdtCNPJ := EdtCNPJ.Text; 
    FillInGMXFormsCNPJ(Web, iDoc1, Webbrowser1.Document, vEdtCNPJ);//transporta o nr do edit CNPJ para o site da RF 
    //vEdtCPF := EdtCPF.Text; 
    //FillInGMXFormsCPF(Web, iDoc1, Webbrowser1.Document, vEdtCPF);//transporta o nr do edit CPF para o site da RF 
end; 

end. 
......................................................................................

sem ela não conseguiria, pois não saberia interagir entre os forms, o que é necessário para você achar as item.tagname e item.name e item.type, tive que modificar a função para que achasse corretamente o CNPJ... tive que estudar o código html tb... eis ai um pedaço dele... 
Código: 

<input name="txtCNPJ" type="text" maxlength="14" id="txtCNPJ" tabindex="1" class="caixaTexto" onfocus="mostraTip('TiptxtCNPJ'); 


cara pensei que não ia conseguir, até que vi que tinha iteragir com os forms e que nem sempre o codigo somente contém apenas um form que no caso da funçào estava estava 0 (zero) e por isso o único que esta no form zero é caixa de texto de pesquisa... 


usei isto para saber em qual form estava... 
Código: 

                  Form1.Memo1.Lines.Add('Elemento: <Nº>  '+IntToStr(I)); 
                  Form1.Memo1.Lines.Add('Elemento: <Name>  '+ovElements.Item(I).name); 
                  Form1.Memo1.Lines.Add('Elemento: <Type>  '+ovElements.Item(I).type); 
                  Form1.Memo1.Lines.Add('Elemento: <Id>    '+ovElements.Item(I).id); 



veja uma função para mostrar os forms.. 

function GetFormByNumber(document: IHTMLDocument2; 
formNumber: integer): IHTMLFormElement; 
var 
forms: IHTMLElementCollection; 
begin 
forms := document.Forms as IHTMLElementCollection; 
if formNumber < forms.Length then 
result := forms.Item(formNumber,'') as IHTMLFormElement 
else 
result := nil; 
end;
outro exemplo:
Fill form  HTML web page form fields and submit DELPHIZones: 

estou usando o TWebBrowser  para procurar e preencher os campos de um form WEB  e submeter os comandos 

function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Showmessage('nera formu');
    Exit;
  end;
  //count forms on document
  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
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        ShowMessage('ajajai klaida');
        Exit;
      end;
    end;
  end;
end;


// Step Number 1
// loading page

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate(edDest.Text);
end;

// Step Number 2
// filling and submiting form
procedure TfrmMain.Button2Click(Sender: TObject);
const
  fields: array[1..11] of string=('title', 'location', 'description', 'age', 'contact_email', 'first_name', 'last_name', 'user_phone', 'user_email', 'password', 'policy_accepted');
  values: array[1..11] of string=('title geras cia yra',
                                  'lokacija',
                                   'Deskripcija', '18', 'exga@yahoo.com', 'Ixmamud', 'ehmeda', '348665954', 'Car@yahoo.com', '123456789', '1');
var
  theForm: IHTMLFormElement;
    document: IHTMLDocument2;
        i: integer;
begin

// fill form fields
  for i:=1 to Length(fields)  do
  begin
    if FillForm(WebBrowser1, fields[i], values[i]) = False then
    Showmessage ('Your Form could not be Filled !')
  end;
// submit form
  document := WebBrowser1.Document as IHTMLDocument2;
  theForm := GetFormByNumber(document, 0);
  TheForm.submit;
end;

end;

OBS : Testei este código e ele realmente preenche os campos da pagina sem ter que digitar ( delphi 7 )

para preencher login e senha voce terá que fazer algumas modificações no código

voce pode procurar no Google pela palavra:

Fill form HTML web page form fields and submit

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...