Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   WebBrowser Login (https://www.clubdelphi.com/foros/showthread.php?t=30282)

lpkwebagent007 03-04-2006 00:01:44

WebBrowser Login
 
Wenas tardes (tardes aca) tengo el siguiente problema

Apenas estoy empezando a trabajar en delphi (antes lo hacía en visual basic pero tiendemucho al desorden y las API's es hsta que alguien las descubra) asi que...tened paciencia conmigo :P

lo que yo quiero hacer es un WebBrowser que me auto logee y que corra en segundo plano (ya hice el webbrowser para delante, apra atras :p ) pero no logro hacer que se loggee

Este es el codigo para loggear

Código PHP:

 <input type="text" name="username" id="loginUsername"/>
 <
input type="password" name="password" id="loginPassword"/>
 <
input type="image" src="http://graficos.com/clickme.png" name="login" value="Login" id="loginSubmit"/>
 <
input type="checkbox" name="autologin" id="loginAuto" />           
</
form

se puede hacer mediante los imputs...pero no logro escribirlos
alguien sabe? se los agradezco de antemano:cool:

dec 03-04-2006 01:32:35

Hola,

No sé si te irá bien e ignoro si habrá otra forma "más elegante", pero, a bote pronto, se me ocurre que "auto-envíes" el formulario.

¿Bastaría este poco de código JavaScript luego del código HTML del formulario?

Código PHP:

<script type="text/javascript">
  
document.nombredetuformulario.submit();
</script> 


lpkwebagent007 03-04-2006 03:13:26

pero me parece que para eso necesito escribir los datos desde antes no? :confused: (voy a probar aver si se puede :cool: )
además, la página de la que hablo no es mía, es como si me quisiera loggear al mail de yahoo

mas bien me preguntaba si podría crear el navegador (win32) y hacerlo que loggee con un TwebBrowser (dandole los datos desde antes)

lo logré hacer con Visual basic...pero no se..no puedo traducirlo

Código:

Private Sub Login()
    On Error Resume Next
    WebBrowser.Document.All(Text3.Text).Value = TBlogin.Text ' logea username
    WebBrowser.Document.All(Text4.Text).Value = TBpassword.Text ' logea password
    SetCursorPos 753, 212
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 'Mouse down
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 'Mouse up

sustituye los imputs que encuentra y con la API simula un click del ratón (que sería en el boton submit)

un saludo

lpkwebagent007 04-04-2006 01:46:44

Ping!
he encontrado el código,...pero no me funciona (ya mas o menos voy teniendo idea)
Código Delphi [-]
// Example: fill out 3 fields on a webpage. 
// If a field is found, continue to the next field; 
// else show an error message.
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not FillForm(WebBrowser1, 'login', 'jaimito') then
    ShowMessage('Error: field LOGIN not found on page')
  else begin
    if not FillForm(WebBrowser1, 'password', 'soytupassword') then
      ShowMessage('Error: field PASSWORD not found on page')
    else begin
      if not FillForm(WebBrowser1, 'paja', 'activated') then
        ShowMessage('Error: field PAJA not done!');
    end;
  end; 
end; 

//Esto no entiendo
// Fill out the first field with the name "FieldName" with a value. 
// We assume that all the fields of the form(s) have different names.
function TForm1.FillForm(WB: TWebBrowser; FieldName, Value: string): Boolean;  
var  
  FormNr, ItemNr: integer;  
  TheForm: Variant;  
begin  
  Result := False;  
  // Check if there is at least one form in the document  
  if WB.OleObject.Document.All.Tags('FORM').Length = 0 then begin  
    ShowMessage('Error: no FORM found on page');
    Exit;  
  end;  
  // Process all forms of the document  
  for FormNr := 0 to WB.OleObject.Document.Forms.Length - 1 do begin  
    TheForm := WB.OleObject.Document.Forms.Item(FormNr); 
    // Process all forms of the document, stop if found  
    for ItemNr := 0 to WB.OleObject.Document.Forms.Item.length - 1 do
      try  
        // If the fieldname is found, try to fill out and stop  
        if TheForm.Item(ItemNr).Name = FieldName then begin  
          TheForm.Item(ItemNr).Value := Value;  
          Result := True;
        end;  
      except  
        Break;  
      end;
      if Result then Break; 
    end;
    // Remove next line if there are several forms in the document with the
    // same fieldnames an which should be set to the same value
    if Result then Break;
  end;  
end;

y sin embargo, compilando me salen chorrocientos de errores

[Error] Unit1.pas(28): E2003 Undeclared identifier: 'FillForm'
[Error] Unit1.pas(33): E2003 Undeclared identifier: 'Result'
[Error] Unit1.pas(35): E2003 Undeclared identifier: 'WB'
[Error] Unit1.pas(40): E2029 'DO' expected but identifier 'OleObject' found
[Error] Unit1.pas(41): E2066 Missing operator or semicolon
[Error] Unit1.pas(41): E2066 Missing operator or semicolon
[Error] Unit1.pas(43): E2029 'DO' expected but identifier 'OleObject' found
[Error] Unit1.pas(46): E2003 Undeclared identifier: 'FieldName'
[Error] Unit1.pas(47): E2003 Undeclared identifier: 'Value'
[Error] Unit1.pas(57): E2097 BREAK or CONTINUE outside of loop
[Error] Unit1.pas(59): E2029 '.' expected but ';' found
[Error] Unit1.pas(66): E2003 Undeclared identifier: 'FillForm'
[Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'

(no....no tengo ni p*ta idea de Delphi, estoy en pañales :p )

jorge1987 05-04-2006 03:19:11

Creo que no interpretaste bien el codigo, tenes que reemplazar los nombres del codigo, por los de tu browser, si tu browser (el componente), se llama WebBrowser1, el error que te tira en WB, de seguro que es, que tu WebBrowser, se llama de otra manera, y supongo, que el resto de los errores, estan relacionados con este que acabo de explicar.

Saludos :D:D

lpkwebagent007 08-04-2006 02:59:03

todo resuelto..gracias!!!! ;)

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
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
    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
        Exit; 
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
Begin
if FillForm(WebBrowser1, 'username', 'yoo soy user') = False then
    ShowMessage('Error. El campo "username" no se encuentra');
if FillForm(WebBrowser1, 'password', 'y yo soy pasword') = False then
    ShowMessage('Error. El campo "password" no se encuentra');
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.yosoytuloginparticular');
end;

end.

Novás 11-07-2006 12:39:30

He probado esta función y funciona perfectamente cuando la página no tiene frames, alguien tiene alguna modificación de la misma para que me funcione con una página con frames.

La página que necesito rellenar es esta:
https://recargas.alphyra.es/recargasWeb/

cocute 30-11-2009 16:58:40

he probado la funcion y funciona bien se rellenan los campos, pero ¿como habria que hacer para que se pulsase también el boton de logueo?

por ejemplo para autologuearse a Ebay
https://signin.ebay.es/ws/eBayISAPI.dll?signIn&i1=2

EDITO SOLUCIONADO:
WebBrowser1.OleObject.document.forms.item(0).submit();

aunque me surge otro problema no consigo que me marque la casilla de seguir conectado
añado esto pero no funciona:
FillForm(WebBrowser1, 'keepMeSignInOption', '1')
no me da error pero no me marca la casilla

Al González 30-11-2009 20:40:46

Cita:

Empezado por cocute (Mensaje 347762)
aunque me surge otro problema no consigo que me marque la casilla de seguir conectado
añado esto pero no funciona:
FillForm(WebBrowser1, 'keepMeSignInOption', '1')
no me da error pero no me marca la casilla

Si con casilla te refieres a un cuadro de verificación (check box), algo como esto puede servirte:

Código Delphi [-]
Var
  Doc :Variant;
Begin
  Doc := WebBrowser1.Document;
  Doc.GetElementByID ('NombreDelCheckBox').Checked := True;

:)

cocute 30-11-2009 22:20:16

Cita:

Empezado por Al González (Mensaje 347773)
Si con casilla te refieres a un cuadro de verificación (check box), algo como esto puede servirte:


Código Delphi [-]
Var
Doc :Variant;
Begin
Doc := WebBrowser1.Document;
Doc.GetElementByID ('NombreDelCheckBox').Checked := True;





:)

Gracias Mil, funciona perfectamente.:):):)

cocute 30-11-2009 23:06:56

otro problema que me surge es que si el webbrowser no esta en primer plano no me carga la web en el webbrowser y por lo tanto no me hace el logeo automático


La franja horaria es GMT +2. Ahora son las 11:03:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi