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

Problema com auto preenchimento


Gaya

Pergunta

Boa tarde,estou criando um sistema de revenda em delphi e uso webbrowser para isso,eu segui o tutoria do Jhonas,porém esse site ele é diferente,ele chega colocar as informações nos value problema é que se eu não clicar pelo webbroswer ele não reconhece as informações,vou mostrar uma imagem para melhorar o que estou querendo dizer:

click.png

Link do site:

https://my.witopia.net/index.php?a=checkout.order

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

fiz um teste para preencher nessa pagina... isto está ok ( esta preenchendo os campos Email e Password

procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.all.Item('name', 0).value := 'teste@bol.com.br';
WebBrowser1.OleObject.Document.all.Item('password', 0).value := 'teste';
end;

no entanto para clicar no botão < LOGIN >

WebBrowser1.OleObject.Document.all.Item('ok', 0).click;

não funciona ... alias nem clicando direto no botão pelo webbrowser não executa nada

é isso que acontece no seu teste ?

Link para o comentário
Compartilhar em outros sites

  • 0

para funcionar corretamente o código deve ser modificado assim

usei 3 botões para voce perceber como deve ser feito, mas pode ser colocado no evento OnDocumentComplete do Webbrowser

unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}

uses MSHtml, ActiveX;

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Silent := true;
WebBrowser1.Navigate('https://my.witopia.net/login');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.all.Item('name', 0).value := 'teste@bol.com.br';
WebBrowser1.OleObject.Document.all.Item('password', 0).value := 'teste';
end;

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;

procedure TForm1.Button3Click(Sender: TObject);
var
theForm: IHTMLFormElement;
document: IHTMLDocument2;
i: integer;
begin

// submit form
( WebBrowser1.Document as IHTMLDocument2).ParentWindow.Focus;
document := WebBrowser1.Document as IHTMLDocument2;
theForm := GetFormByNumber(document, 0);
TheForm.submit;
end;

end.

===============================================================

OBS: Como eu não tenho um email valido vai ocorrer o erro de :

Incorrect email or password

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

a pagina do checkout

https://my.witopia.net/index.php?a=checkout.order

dados a serem preenchidos na pagina

<input id="first_name" class="text" type="text" placeholder="First Name" value="" name="first_name"></input>

input id="last_name" class="text" type="text" placeholder="Last Name" value="" name="last_name"></input>

input id="company" class="text" type="text" placeholder="Company Name (optional)" value="" name="company"></input>

<input id="billing_address" class="text" type="text" placeholder="Address" value="" name="billing_address"></input>

<input id="billing_address2" class="text" type="text" placeholder="Apt, Suite, Bldg. (optional)" value="" name="billing_address2"></input>

<input id="billing_city" class="text" type="text" placeholder="City" value="" name="billing_city"></input>

<input id="billing_zip" class="text" type="text" placeholder="ZIP Code" value="" name="billing_zip"></input>

<input id="phone" class="text" type="text" placeholder="Phone Number" value="" name="phone"></input>

voce já tentou preencher via webbrowser ? o que acontece ?

=================================================================

fiz um teste, esta preenchendo corretamente

procedure TForm1.Button2Click(Sender: TObject);
begin
WebBrowser1.OleObject.Document.all.Item('first_name', 0).value := 'Pedro';
WebBrowser1.OleObject.Document.all.Item('last_name', 0).value := 'Souza';
WebBrowser1.OleObject.Document.all.Item('company', 0).value := 'Pedro';
WebBrowser1.OleObject.Document.all.Item('billing_address', 0).value := 'Rua das Palmeiras n. 321';
WebBrowser1.OleObject.Document.all.Item('billing_address2', 0).value := 'Rua dos Andrades n. 123';
WebBrowser1.OleObject.Document.all.Item('billing_city', 0).value := '~Santo Amaro - SP';
WebBrowser1.OleObject.Document.all.Item('billing_zip', 0).value := '23090-30';
WebBrowser1.OleObject.Document.all.Item('phone', 0).value := '3123-2345';
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ele coloca os dados porém fica igual na imagem que eu coloquei acima,ele fica em branco,ai quando o webbroswer clica no botão para proseguir o site retorna um erro de que os campos estão em brancos,ai eu vou e clico nos campos manualmente e o site reconhece.Não sei se consegui explicar bem a situação qualquer coisa só me falar.

Link para o comentário
Compartilhar em outros sites

  • 0

Untitled2.png

Olha fica assim.Meu codigo:

webbrowser1.navigate('https://my.witopia.net/index.php?a=checkout.order');

if not Continuar then
Break;
delay(2000);
  while (WebBrowser1.Busy) or (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) do
  begin
    Application.ProcessMessages;
    Sleep(100);
  end;

WebBrowser1.OleObject.Document.All.Item('first_name', 0).value := Nome();
WebBrowser1.OleObject.Document.All.Item('last_name', 0).value := 'Silva';
WebBrowser1.OleObject.Document.All.Item('billing_address', 0).value := 'Rua Oliveira Maciel';
WebBrowser1.OleObject.Document.All.Item('billing_city', 0).value := 'Rio Branco';
WebBrowser1.OleObject.Document.All.Item('billing_country', 0).value := '32';
Link para o comentário
Compartilhar em outros sites

  • 0
webbrowser1.navigate('https://my.witopia.net/index.php?a=checkout.order');

if not Continuar then
Break;
delay(2000);
  while (WebBrowser1.Busy) or (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) do
  begin
    Application.ProcessMessages;
    Sleep(100);
  end;

WebBrowser1.OleObject.Document.All.Item('first_name', 0).value := Nome();

WebBrowser1.OleObject.Document.all.Item('first_name', 0).focus;

WebBrowser1.OleObject.Document.All.Item('last_name', 0).value := 'Silva';
WebBrowser1.OleObject.Document.All.Item('billing_address', 0).value := 'Rua Oliveira Maciel';
WebBrowser1.OleObject.Document.All.Item('billing_city', 0).value := 'Rio Branco';
WebBrowser1.OleObject.Document.All.Item('billing_country', 0).value := '32';

é só voce colocar essa linha de código, que todos os campos ficarão ativos

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Utilizando .focus agora deu certo,agora meu ultimo problema é que ele adiciona a senha escolhida porém diz estar em branco,porque em vez de estar como password(aquelas bolinhas) ele adiciona como um texto normal,tem como arrumar isso? O erro é esse aqui :

Password should not be a blank.
Invalid value.
Link para o comentário
Compartilhar em outros sites

  • 0

como eu disse:

isso acontece quando o pagina não foi totalmente carregada

as bolinhas que aparecem no campo, são colocados pelo script da pagina, se não aparecem é porque o código script não foi executado corretamente

tente atualizar a pagina pelo webbrowser

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

veja nesse link ... tem muitas informações sobre o webbrowser

http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_oleobject.htm

http://delphilando.wordpress.com/2012/10/20/utilizando-oleobject-do-web-browser/

OBS: fiz uns testes aqui... esse problema acontece ( não mostra as bolinhas no campo senha ) quando o comando é dado ( preencher o campo ) e a pagina ainda não foi totalmente carregada

experimente colocar o código para preenchimento dos campos no evento OnDocumentComplete do webbrowser

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom eu não sei como implatar isso dentro do button para preencher os campos,tenho isso no codigo:

procedure TForm1.OnDocumentComplete(Sender: TObject;const pDisp: IDispatch;var URL: OleVariant);
var
  currentBrowser: IWebBrowser;
  topBrowser: IWebBrowser;
  document: OleVariant;
  windowName: string;
begin
  currentBrowser := pDisp as IWebBrowser;
  topBrowser := (Sender as TWebBrowser).DefaultInterface;
  if currentBrowser = topBrowser then
    ShowMessage('Complete document was loaded')
  else
  begin
    document := currentBrowser.Document;
    windowName := document.ParentWindow.Name;
    ShowMessage(Format('Frame "%s" was loaded', [windowName]));
  end;
end;

Como faço para usar ? Desculpa minha ignorância.

Link para o comentário
Compartilhar em outros sites

  • 0

procedure TForm1.OnDocumentComplete(Sender: TObject;const pDisp: IDispatch;var URL: OleVariant);

se voce não define nada, o código desse evento será executado todas as vezes que uma pagina tiver sido carregada

repare no código que voce postou .... voce pode determinar qual parte do código que esta no evento sera executado

OBS: o código que voce usou em um botão para preencher os campos, pode ser colocado nesse evento ...

ele será executado assim que a pagina tiver sido carregada completamente, mas é bom definir em qual

pagina ele será executado.

veja alguns exemplos de uso:

http://stackoverflow.com/questions/17939813/webbrowser1documentcomplete-and-webbrowser1navigatecomplete2

https://beta.groups.yahoo.com/neo/groups/delphi-webbrowser/conversations/topics/1153

http://www.delphifaq.com/faq/delphi/network/f264.shtml

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Estou com uma dificuldade extrema de entender como usar,mas então quer dizer que eu posso usar dessa forma?

if OnDocumentComplete() then
showmessage('Deu certo');

obs: Não sei arrumar os parametros.

Pelo o que entendi é essa comparação que define se foi carregada,porém não da para usar ela no codigo foram da procedure.

currentBrowser := pDisp as IWebBrowser;
Link para o comentário
Compartilhar em outros sites

  • 0

procedure TForm1.OnDocumentComplete(Sender: TObject;const pDisp: IDispatch;var URL: OleVariant);
var
currentBrowser: IWebBrowser;
topBrowser: IWebBrowser;
document: OleVariant;
windowName: string;
begin
currentBrowser := pDisp as IWebBrowser;
topBrowser := (Sender as TWebBrowser).DefaultInterface;
if currentBrowser = topBrowser then

begin
ShowMessage('Complete document was loaded')
end;

O showmessage, so vai ser executado, depois de todos os frames carregar.

Link para o comentário
Compartilhar em outros sites

  • 0

Ele não fica as estrelinhas, não e porque não ta carregando a pagina, e por causa de uma proteção mesmo.

Faz assim, que vai ficar em estrela... so não preenchi o resto, por preguiça;

nv.OleObject.document.getElementById('password').outerHTML:= '<input type="password" autocomplete="off" class="text password" id="password" name="password" value="teste" placeholder="Password*">';
nv.OleObject.document.getElementById('password2').outerHTML:= '<input type="password" autocomplete="off" class="text password" id="password2" name="password2" value="teste" placeholder="Password (retype)">';
Aonde esta escrito TESTE, e aonde vai a senha, então coloca a variavel ai no meio.
Link para o comentário
Compartilhar em outros sites

  • 0

Rafael tentei colocar o código e retorno os seguintes erros:

[Error] Unit1.pas(353): Undeclared identifier: 'nv'

[Error] Unit1.pas(353): Missing operator or semicolon

[Error] Unit1.pas(353): Incompatible types: 'String' and 'IDispatch'

Nessa linha:

nv.OleObject.document.getElementById('password').outerHTML:= '<input type="password" autocomplete="off" class="text password" id="password" name="password" value="teste" placeholder="Password*">';

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,2k
    • Posts
      652k
×
×
  • Criar Novo...