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

(Resolvido) Como Interagir o delphi com Páginas WEB para pegar valores


Badboy for Life

Pergunta

25 respostass a esta questão

Posts Recomendados

  • 0

Ola a todos, primeira mente quero pedir desculpas por Reabrir um POST meio antigo!

Estou começando a utilizar este componente TWebBrowser na minha aplicacao em delphi2010.

O que mais tenho no momento são duvidas.

Consegui fazer um navegador baseado no IE8 e funciona bem, com funções basicas.

Ate ai beleza.

Passei a utiliza o TWebBrowser no meu programa de cadastro de filmes para localizar os Posters mais facilmente

diretamente no google.

segue o codigo, abaixo

// url variavel global
url := 'http://www.google.com.br/search?também=isch&hl=pt-BR&source=hp&biw=' +
       '1280&bih=675&q='+DBEdit1.Text+'&gbv=';
frWEB := TfrWEB.Create(Self);
frWEB.Show;
// antes de utilizar o TwebBro... utilizava o navegador padrão.
//ShellExecute(self.WindowHandle,'open',(PWideChar(url)),'','',1);
Mas me deparei com um site de cadastros de filmes que não utiliza a mesmo tecnica da GOOGLE.COM.BR para search ele só me volta isso aqui "http://nomedosite.com/lookup.cfm" Dai pesquisando no forum encontrei este post relacionado com o TWebBrowser. Continuando nesta pagina eu exibi o codigo fonte em HTML que é:
<table CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
    <tr CLASS="bgDB">
        <td ALIGN="center">
            <table CELLPADDING="0" CELLSPACING="0">
                <FORM METHOD="post" ACTION="/lookup.cfm" NAME="MainSearchForm" ONSUBMIT="return CheckValue();">
                <tr>
                    <td STYLE="padding-right:5px;">
                        <img SRC="/Graphics/Search.gif" width="61" height="15">
                    </td>
                    <td>
                        <input type="text" name="find" STYLE="font-size:9pt;" SIZE="45">
                        <input TYPE="Hidden" NAME="Action" VALUE="Lookup">
                    </td>
                    <td STYLE="padding-left:10px;"><input TYPE="Image" SRC="/Graphics/Search_Button.gif"></td>
                    <td STYLE="color:#FFFFFF;padding-left:10px;font-size:12px;"><a HREF="/Features/index.cfm?content=advsearch"
Reparando no HTML acima tem um campo/ou sei la como definir ela de "input" no exemplo abaixo postado pelo Douglas com Tags etc... tb consta o tal input
ShowMessage(WebBrowser1.OleObject.Document.All.Tags('input').item('meucampo').text);

Simplificando como seria possível no campo Search deste site de filmes ele escrever o titulo do filme que esta em um DBEdit e depois apertar OK para procurar o filme?

agradeço desde já!

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que achei uma solução, mas por algum motivo o delphi XE não compila.

segue abaixo o codigo:

uses
SHDocVw, ActiveX, MSHTML;

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 SetFieldValue(theForm: IHTMLFormElement;
  const fieldName: string; const newValue: string;
  const instance: integer=0);
var
  field: IHTMLElement;
  inputField: IHTMLInputElement;
  selectField: IHTMLSelectElement;
  textField: IHTMLTextAreaElement;
begin
  field := theForm.Item(fieldName,instance) as IHTMLElement;
  if Assigned(field) then
  begin
    if field.tagName = 'INPUT' then
    begin
      inputField := field as IHTMLInputElement;
      if (inputField.type_ <> 'radio') and
         (inputField.type_ <> 'checkbox')
      then
        inputField.value := newValue
      else
        inputField.checked := (newValue = 'checked');
    end
    else if field.tagName = 'SELECT' then
    begin
      selectField := field as IHTMLSelectElement;
      selectField.value := newValue;
    end
    else if field.tagName = 'TEXTAREA' then
    begin
      textField := field as IHTMLTextAreaElement;
      textField.value := newValue;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0);
  SetFieldValue(theForm,'title','Back to the Future');
end;
a parte que exibe o erro e não compila o projeto e justamente nesta linha document := TWebBrowser.Document as IHTMLDocument2;
[DCC Error] Unit1.pas(83): E2233 Property 'Document' inaccessible here
[DCC Error] Unit1.pas(83): E2015 Operator not applicable to this operand type

Como o codigo acima diz, DOCUMENT inacessível aqui e Operador não aplicavel para este tipo de operação.

alguém sabe como resolver ou alguma luz?

agradeço desde já! ^_^

Editado por jaumDoDelphi
Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Jhonas RESOLVIDO!

obrigado pela dica do site, nele tem mta explicação consegui preencher o campo de BUSCA de filmes.

Mas dai vem outro problemas, Para clicar no OK "SUBMIT"

tentei varias formas mas, nada funciona só da erro de ACCESS VIOLATION, foi dai que li no site que como hj em dia

algumas pessoas agem de má-fe, isso fez com que acaba-se prejudicando mtas pessoas do mundo da programação.

Simplificando como tem uns :angry: Topeiras :angry: que fazem BOT para lagar os sites alheios.

Quase nenhum site mais permite tal comando para dar o OK em formularios na WEB.

Mas beleza, Pelomenos agora o meu programa já manda o nome do filme no campo de procura e so vou ter que apertar o OK mesmo!

vlwz e um abraço a todos! :P

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Jhonas RESOLVIDO!

obrigado pela dica do site, nele tem mta explicação consegui preencher o campo de BUSCA de filmes.

Mas dai vem outro problemas, Para clicar no OK "SUBMIT"

tentei varias formas mas, nada funciona só da erro de ACCESS VIOLATION, foi dai que li no site que como hj em dia

algumas pessoas agem de má-fe, isso fez com que acaba-se prejudicando mtas pessoas do mundo da programação.

Simplificando como tem uns :angry: Topeiras :angry: que fazem BOT para lagar os sites alheios.

Quase nenhum site mais permite tal comando para dar o OK em formularios na WEB.

Mas beleza, Pelomenos agora o meu programa já manda o nome do filme no campo de procura e so vou ter que apertar o OK mesmo!

vlwz e um abraço a todos! :P

JaumDoDelphi.

pra dar submit nos forms usando o webbrowser eu usei o comando abaixo e funcionou beleza.

WebBrowser.OleObject.Document.Forms.Item('form1','').submit;

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde a todos,

Gostaria de colocar uma questão o seu código funciona perfeitamente no webbrowser do delphi mas estou tendo um problema abrir o meu browser por defeito com a página autenticada tal como estou a ver no meu webbrowser do delphi.

Alguma sugestão.

Um abraço

Filipe Branquinho (filipe.branquinho@gmail.com)

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, só para lembrar ....  dúvidas devem ser postadas no forum principal como voce fez.... o forum de tutoriais é somente para códigos prontos ...ok ?

estou tendo um problema ao abrir o meu browser por defeito com a página autenticada

quanto a sua dúvida, por favor seja mais explicito, pois não entendi exatamente o seu problema

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

No Delphi estou a utilizar o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
begin
   WebBrowser1.Navigate('https://www.site.pt/');
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
CurrentBrowser: IWebBrowser2;
TopBrowser: IWebBrowser2;
Document: OleVariant;
Doc3 : IHTMLDocument3;
Frm : IHtmlFormElement;

Elements: OleVariant;
MyBrowser: OleVariant;

i: Integer;
parameter:string;
begin
   CurrentBrowser := pDisp as IWebBrowser2;
   TopBrowser := (Sender as TWebbrowser).DefaultInterface;
   if Assigned(CurrentBrowser) and Assigned(TopBrowser) then
   begin
      if CurrentBrowser = TopBrowser then
      begin
         Doc3 := CurrentBrowser.Document as IHTMLDocument3;
         Webbrowser1.OnDocumentComplete := nil;
         Doc3.getElementById('UserName').setAttribute('value', 'ABCDEF', 0);
         Doc3.getElementById('Password').setAttribute('value', '123456', 0);
         WebBrowser1.Silent;
         Elements := WebBrowser1.OleObject.Document.forms.item(0).elements;

         for i := 0 to (Elements.Length - 1) do
         begin
            //if (Elements.item(i).tagName = 'sbmtLogin') then
            begin
               WebBrowser1.Silent := true;
               Elements.item(i).Click;
            end;
         end;

      end;
   end;
end;

 

No webbrowser do delphi funciona perfeitamente, o que pretendo é abrir o meu browser google chrome com o auto login tal como está a acontecer no webbrowser do delphi.

 

Link para o comentário
Compartilhar em outros sites

  • 0

Quero abrir o site das finanças directamente pelo delphi, como é um site https tenho de passar variáveis por exemplo:

         "Doc3.getElementById('UserName').setAttribute('value', 'ABCDEF', 0);"

No delphi estou a utilizar o componente WebBrowser1 que funciona perfeitamente, mas o que pretendo é que os utilizadores do meu programa não utilizem o componente webbrowser1 do delphi mas sim o browser por defeito dos seus pcs.

A minha dúvida é como chamar um site https em delphi por exemplo o das finanças passando parametros Username e Password e executar no browser por defeito do pc.
         

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela ajuda mas já testei os 2 sem sucesso.

Vou tentar ser mais claro...vou dar um exemplo:

Necessito de um código delphi que me permita abrir uma página web por exemplo o gmail passando email e password para as caixas de login.

url:=www.gmail.com;

ShellExecute(0, 'open', PChar(String(url)), nil, nil, SW_SHOW);

e passar os parametros email e password.

mas não estou a conseguir passar os parametros.

Link para o comentário
Compartilhar em outros sites

  • 0

não tenho essa versão, mas acho que seria possivel isso, se voce estivesse usando o Delphi For .NET

vou fazer uma pesquisa na versão do seu delphi, amanhã ou depois te informo se achar uma soluçao para o seu caso..ok?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, não achei nada para o delphi 2006, entretanto, sei que é possivel, mas teria que dispor de tempo para pesquisar mais sobre isso.

por enquanto a opção é usar o webbrowser ou pode tentar resolver o problema em outro forum

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...