Fórum Preencher Cmpo automaticamente WebBrowser #329006
09/09/2006
0
Estou tentanto preencher o campo CNPJ do site:
http://www.receita.fazenda.gov.br/Aplicacoes/ATSPO/Certidao/CertInter/NICertidao.asp?tipo=1
Acontece que testei o fonte em outros sites e o preenchimento acontece.
a rotina nao esta funcionando somente no site da receita por favor analisem o fonte e caso tenha algum erro por favor me ajudem
desde ja agradeço.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Label1: TLabel;
Button1: TButton;
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
procedure FormCreate(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.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if FillForm(WebBrowser1, ´NI´, ´05.247.421/0001-35´) = False then
ShowMessage(´Erro. Campo não disponível.´);
end;
procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
if ProgressMax = 0 then
begin
label1.Caption := ´´;
Exit;
end;
try
if (Progress <> -1) and (Progress <= ProgressMax) then
label1.Caption := IntToStr((Progress * 100) div ProgressMax) + ´¬ loaded...´
else
label1.Caption := ´´;
except
on EDivByZero do Exit;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Webbrowser1.Navigate(´http://www.receita.fazenda.gov.br/Aplicacoes/ATSPO/Certidao/CertInter/NICertidao.asp?tipo=1´);
// Show the Titel of the currently active Webpage in the titlebar
// Den Titel der aktuellen Webseite in der Titeleiste anzeigen
end;
end.
Eme_matos
Curtir tópico
+ 0Posts
09/09/2006
Eme_matos
acho que consegui resolver o problema no preenchimento do campo, porem esta ocorrendo o seguinte:
a rotina preenche os dois campos o campo CNPJ e o campo caracteres de verificação. Por favor me auxilie a resolver o erro
segue abaixo o fonte:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, MSHTML, StdCtrls;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
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 FillInGMXForms(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 Fazendaria´, 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
for i := ovElements.Length - 1 downto 0 do
begin
try
// preencher os campos
if (ovElements.item(i).tagName = IEFields[1]) and
(ovElements.item(i).type = IEFields[2]) then
begin
ovElements.item(i).Value := P_CNPJ;
Inc(IEFieldsCounter);
end;
except
// falha...
end;
end; { for i...}
end;
// se o campo estiver preenchido.
if IEFieldsCounter = 3 then ExecuteScript(iDoc1, ´document.login.submit()´,
´JavaScript´);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
IDoc1: IHTMLDocument2;
Web: ShDocVW.IWebBrowser2;
begin
Webbrowser1.Navigate(´http://www.receita.fazenda.gov.br/Aplicacoes/ATSPO/Certidao/CertInter/NICertidao.asp?tipo=1´);
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
Web := WebBrowser1.ControlInterface;
FillInGMXForms(Web, iDoc1, Webbrowser1.Document, ´05.247.421/0001-35´);
end;
end.
Gostei + 0
11/09/2006
Rodc
Gostei + 0
11/09/2006
Eme_matos
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, MSHTML, StdCtrls,shellapi, Buttons;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
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 FillInGMXForms(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 Fazendaria´, 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 TForm1.Button1Click(Sender: TObject);
var
IDoc1: IHTMLDocument2;
Web: ShDocVW.IWebBrowser2;
begin
Webbrowser1.Navigate(´http://www.receita.fazenda.gov.br/Aplicacoes/ATSPO/Certidao/CertInter/NICertidao.asp?tipo=1´);
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
Web := WebBrowser1.ControlInterface;
FillInGMXForms(Web, iDoc1, Webbrowser1.Document, ´05.247.421/0001-35´);
end;
end.
Gostei + 0
12/09/2006
Rodc
Abraços,
Gostei + 0
06/11/2006
Nigro
Funcionou perfeitamente...
Gostei + 0
03/08/2007
Adriano_servitec
https://www8.receita.fazenda.gov.br/SimplesNacional/controleacesso/autentica.aspx?id=5
Gostei + 0
06/08/2007
Adriano_servitec
a funçao pertençe a este site
http://www.swissdelphicenter.ch/torry/showcode.php?id=1732
Eh soh adaptar
Gostei + 0
30/06/2015
Ednaldo Junior
Estou precisando com urgencia que funcione para esse site
https://www.sefaz.rs.gov.br/NFE/NFE-COM.aspx
Já tentei de tudo e não funciona!
Ajudem por favor
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)