GARANTIR DESCONTO

Fórum Ajuda para Capturar Código Fonte HTML Sem IDHTTP #354301

25/02/2008

0

Bom dia a todos.

Preciso capturar o código Fonte de uma pagina HTML e [b:ae2e98670b]Não posso utilizar o TIDHTTP[/b:ae2e98670b]. para isso estou utilizando a procedure abaixo:

[b]procedure TForm1.Button2Click(Sender: TObject);
var
 URL : String ;
 S:Variant;
Begin
  URL := ´´;
  URL := ´http://www.telebank.com.br/unisys/apoio/itens.aspx?cod_kit=1´;
  webbrowser1.navigate(url);
   S := WebBrowser1.Document;
  memo1.Clear;
  Memo1.Lines.Add(S.Body.innerHTML);
  memo1.Lines.SaveToFile(´C:\memo1.txt´);
end;[/b]

O problema é que o conteúdo que esta no webbrowser não é o mesmo que esta no campo MEMO, alguém poderia me ajudar?




Ferreia2

Ferreia2

Responder

Posts

25/02/2008

Onjahyr

Será que não é a codificação do texto? Como não bate, o que você está querendo fazer? Dê mais detalhes no que você quer fazer (o objetivo)?


Responder

Gostei + 0

25/02/2008

Ferreia2

Preciso capturar o codigo fonte da pagina HTML, exibida no WebBrowser, porém como ja disse não posso usar o IDHTTP. achei essa função acima só que mostra sempre o conteudo da pagina anterior.


Responder

Gostei + 0

25/02/2008

Onjahyr

Sim, eu entendi, mas o que vc quer fazer com o código fonte? por exemplo: vc quer capturar um registro dentro dele? como... o dolar do dia ou os números da megasena, etc... é isso? Se for, eu tenho a rotina, porém, sendo ou não, há um problema se você estiver pegando o código fonte de uma página produzina por javascript ou flash por exemplo. O conteúdo, resultado é produzido pelas funções do javascript e não tem como ver o resultado obtido nos códigos, só a programação em sí. Se for o Flash então, aí é pior, a não ser que o desenvolvedor dos arquivos SWF for vc mesmo, aí teria que acrescentar ao flash, parâmetros para poder capturar...

blz


Responder

Gostei + 0

25/02/2008

Ferreia2

Olá onjahyr é semelhante a pegar o dolar do dia, a diferença é que lá usa o IDHTTP e aqui eu não posso usar. Se puder ajudar agradeço.

A pagina é essa

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><title>
.::Relatórios Telebank::.
</title></head>
<body>
    <form name="form2" method="post" action="itens.aspx?cod_kit=1" id="form2">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM1NDgwNDMwNQ9kFgICAw9kFgICAQ88KwANAgAPFgYeC18hRGF0YUJvdW5kZx4JUGFnZUNvdW50AgEeC18hSXRlbUNvdW50AgRkARAWAwIBAgICBRYDPCsABQEAFgIeCkhlYWRlclRleHQFDk7Dum1lcm8gU2VyaWFsPCsABQEAFgIfAwUNQ8OzZGlnbyBQcm9kLjwrAAUBABYCHwMFDUxvY2FsaXphw6fDo28WA2ZmZhYCZg9kFgoCAQ9kFg5mDw8WAh4EVGV4dAUOTW9kZW0gU2VtIENoaXBkZAIBDw8WAh8EBQowNjA3MjQxNzc4ZGQCAg8PFgIfBAUNNzg5ODkxMjIwNzA5OGRkAgMPDxYCHwQFETcvOC8yMDA2IDExOjE3OjQxZGQCBA8PFgIfBAUGJm5ic3A7ZGQCBQ8PFgIfBAUHQ2xpZW50ZWRkAgYPDxYCHwQFAjE4ZGQCAg9kFg5mDw8WAh8EBQNQT1NkZAIBDw8WAh8EBQo2OTEyNjA1ODExZGQCAg8PFgIfBAUQQkk1MTAwUE1UMDAzQ1NUMWRkAgMPDxYCHwQFETcvOC8yMDA2IDExOjE4OjEwZGQCBA8PFgIfBAUGJm5ic3A7ZGQCBQ8PFgIfBAUMVCYjMjMzO2NuaWNvZGQCBg8PFgIfBAUDOTI1ZGQCAw9kFg5mDw8WAh8EBR9MZWl0b3IgZGUgQyYjMjQzO2RpZ28gZGUgQmFycmFzZGQCAQ8PFgIfBAUHNzYxMDMzOGRkAgIPDxYCHwQFAzg0MGRkAgMPDxYCHwQFETcvOC8yMDA2IDExOjE4OjM3ZGQCBA8PFgIfBAUGJm5ic3A7ZGQCBQ8PFgIfBAUHRXN0b3F1ZWRkAgYPDxYCHwQFGHJldG9ybm91IGRvIGNsaWVudGUgMTk2NWRkAgQPZBYOZg8PFgIfBAUIQ2hpcCB0aW1kZAIBDw8WAh8EBRQ4OTU1MDMxMTAwMDA1MzU1NTE5MWRkAgIPDxYCHwQFAThkZAIDDw8WAh8EBRE3LzgvMjAwNiAxMToxOToxM2RkAgQPDxYCHwQFBiZuYnNwO2RkAgUPDxYCHwQFFE1hbnV0ZW4mIzIzMTsmIzIyNztvZGQCBg8PFgIfBAUOQ2hpcCBibG9xdWVhZG9kZAIFDw8WAh4HVmlzaWJsZWhkZBgBBQRncmlkD2dkz2zWgDZox3lQuV6r2mUe7e+K1X0=" />
</div>

<script type="text/javascript">
<!--
var theForm = document.forms[´form2´];
if (!theForm) {
    theForm = document.form2;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script>


        <div>
            <p align=center><img src="http://www.telebank.com.br/Figs/logoTele_72.jpg" />
            <p align=center><font face=arial size=4 color=000066><b>Estoque - Lista de Ítens</b></font></p>
            <br />
            <table border=0 width=760 align=center>
                <tr>
                    <td>
                        <div>
<table cellspacing="0" rules="all" border="1" id="grid" style="font-family:Trebuchet MS,Arial;font-size:Small;width:100¬;border-collapse:collapse;">
<tr>
<th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$descricao_produto´)">Produto</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$serial_number´)">Número Serial</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$cod_produto´)">C&243;digo Prod.</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$data_cadastro´)">Cadastrado em</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$nota_fiscal´)">NF</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$descricao_localizacao´)">Localiza&231;&227;o</a></th><th scope="col"><a href="javascript:__doPostBack(´grid´,´Sort$localizacao_detalhe´)">Detalhe</a></th>
</tr><tr>
<td>Modem Sem Chip</td><td>0607241778</td><td>7898912207098</td><td>7/8/2006 11:17:41</td><td>&nbsp;</td><td>Cliente</td><td>18</td>
</tr><tr style="background-color:#F1FFF5;">
<td>POS</td><td>6912605811</td><td>BI5100PMT003CST1</td><td>7/8/2006 11:18:10</td><td>&nbsp;</td><td>T&233;cnico</td><td>925</td>
</tr><tr>
<td>Leitor de C&243;digo de Barras</td><td>7610338</td><td>840</td><td>7/8/2006 11:18:37</td><td>&nbsp;</td><td>Estoque</td><td>retornou do cliente 1965</td>
</tr><tr style="background-color:F1FFF5;">
[b]<td>Chip tim</td><td>89550311000053555191[/b]</td><td>8</td><td>7/8/2006 11:19:13</td><td>&nbsp;</td><td>Manuten&231;&227;o</td><td>Chip bloqueado</td>
</tr>
</table>
</div>
                        
                        &nbsp;
                    </td>
                </tr>
            </table>
            <p align=center><input type=button onclick="javascript:history.go(-1)" value="Voltar" /></p>
        </div>
    
<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCALLwc/3CALep6XoDwLhyLmnAgLsrp7SBAKx0aPLCwLdm9CzBQLyz/WkDwL52MLxBPgaVZ/l1FQ5AJ7jO11wGwyDROA3" />
</div></form>
</body>
</html>


Preciso pegar a string [b:8a7255f813]Chip tim</td><td>89550311000053555191[/b:8a7255f813]
mas tendo o fonte na mão o resto é fácil.


Responder

Gostei + 0

25/02/2008

Onjahyr

O que você deseja pegar está no seu Memo (já capturado)? ou o conteúdo do Memo não aparece, e é este o motivo? Se não aparece é porque ele é gerado por funções de JavaScript, não tem jeito. Se o conteúdo do que vc deseja está dentro do seu TMemo: Procure uma vídeo-aula aqui na ClubeDelphi como pegar o dolar numa página da web. Vai ser moleza, não faço a rotina porquê, além de tá muito explicado na vídeo-aula, dá um trabalho enorme fazer, tem que contar a primeira string desejada até a última. E não espere ter os fontes pronto na internet porquê cada página varia uma da outra, é muito trabalhosos, mas é muito simples de fazer... Veja a vídeo-aula que ele explica passo-a-passo!!! Não tem como errar se fizer a contagem direitinha. E lembre-se, não precisa usar o TMemo, pode capturar a informação diretamente pelo site.

Blz.


Responder

Gostei + 0

25/02/2008

Ferreia2

Colega acho que você ainda não entendeu minha necessidade.
A Video Aula utiliza o IDHTTP e eu não posso usar este componente. Como capturar o dado que eu preciso no Codigo HTML eu sei, o problema é que não estou conseguindo capturar o codigo fonte sem ser pelo componente TIHTTP, Entendeu agora?


Responder

Gostei + 0

25/02/2008

Onjahyr

:lol:

Ahhhh, entendi. Não é a captura da string que você quer... É capturar o código fonte da página não é?

Eu fiz um teste aqui e funcionou beleza....

É isso que vc deseja? Capturar o código HTML da página e colocar num TMemo?


Responder

Gostei + 0

25/02/2008

Ferreia2


Ahhhh, entendi. Não é a captura da string que você quer... É capturar o código fonte da página não é? 

Eu fiz um teste aqui e funcionou beleza.... 

É isso que vc deseja? Capturar o código HTML da página e colocar num TMemo?



Colega é exatamente isso que estou precisando,. lembrando que não posso utilizar o componente TIDHTTP da Aba Indy.


Responder

Gostei + 0

25/02/2008

Onjahyr

Ok, vamos lá... Há um erro no seu código, mas o processo funciona sim, vejamos:

[b:718cff4f13]O evento abaixo é do clique de um botão:[/b:718cff4f13]
procedure TForm1.Button1Click(Sender: TObject);
var
 URL : String ;
Begin
  URL := ´´;
  URL := ´http://www.devmedia.com.br´;
  webbrowser1.navigate(url);
end;


[b:718cff4f13]O evento abaixo é do componente WebBrowser (ObjectInspector):[/b:718cff4f13]

// Este evendo ocorre quando a página estiver totalmente carregada


procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
 S   : Variant;
begin
  S := WebBrowser1.Document;
  memo1.Clear;
  Memo1.Text := S.Body.OuterHTML;
  memo1.Lines.SaveToFile(´C:\memo1.txt´);
end;



Blz.


Responder

Gostei + 0

27/02/2008

Ferreia2

Valeu. Problema Resolvido


Responder

Gostei + 0

28/08/2015

Andre Marsola

Onjahyr

Estou com um problema parecido. Eu já tenho o codigo fonte do HTML em um campo memo.

o Código HTML é este:

			<td align="center"> 
				<input id="CallBtn" type="button" class="button"
					onclick="confirmaChamada(this,'22179192')"
					value="Confirmar Chamada />
			</td>

			<td align="center"> 
				<input id="CallBtn" type="button" class="button"
					onclick="confirmaChamada(this,'22463368')"
					value="Confirmar Chamada />
			</td>




Porém preciso "percorrer" linha por linha deste codigo, para localizar o seguinte trecho: "onclick="confirmaChamada(this,'22179192')"

Na Verdade o que eu preciso mesmo é pegar o valor deste parametro "onclick", e jogar isto em um outro campo memo, ou até um GRID qualquer.

No Exemplo acima, eu teria uma lista assim:

confirmaChamada(this,'22179192'
confirmaChamada(this,'22463368')



Eu tentei isso aqui, mas não resolveu:

  documentoAtivo := WebBrowser1.Document;
  Memo1.text := documentoAtivo.Body.OuterHTML;
  memo2.lines.Clear;
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    if pos('confirmaChamada(this,',Memo1.Lines.Strings[i]) > 0 then
      begin
         ShowMessage(Memo1.Lines.Strings[i]);
         pIni  := pos('this,',Memo1.Lines.Strings[i])+6;
         pFim  := pos(#39+')',Memo1.Lines.Strings[i]);
         memo2.Lines.Add(Copy(Memo1.Lines.Strings[i], pIni , pFim-pIni));  // -> TENTEI ESTE PARA ADICIONAR SOMENTE O TRECHO
         memo2.Lines.Add(Memo1.Lines.Strings[i]);  //-> TENTEI ESTE PARA "TENTAR" ADICIONAR A LINHA INTEIRA
       end;
       ShowMessage('NAO PASSOU');  // MAS EM TODAS AS TENTATIVAS... ENTRAVA AQUI.

  end;


Alguém pode me ajudar.
Responder

Gostei + 0

28/08/2015

Andre Marsola

Onjahyr

Estou com um problema parecido. Eu já tenho o codigo fonte do HTML em um campo memo.

o Código HTML é este:

<td align="center"> 
    <input id="CallBtn" type="button" class="button"
        onclick="confirmaChamada(this,'22179192')"
        value="Confirmar Chamada />
</td>
 
<td align="center"> 
    <input id="CallBtn" type="button" class="button"
        onclick="confirmaChamada(this,'22463368')"
        value="Confirmar Chamada />
</td>


Porém preciso "percorrer" linha por linha deste codigo, para localizar o seguinte trecho: "onclick="confirmaChamada(this,'22179192')"

Na Verdade o que eu preciso mesmo é pegar o valor deste parametro "onclick", e jogar isto em um outro campo memo, ou até um GRID qualquer.

No Exemplo acima, eu teria uma lista assim:

confirmaChamada(this,'22179192')
confirmaChamada(this,'22463368')

Eu tentei isso aqui, mas não resolveu:

documentoAtivo := WebBrowser1.Document;
Memo1.text := documentoAtivo.Body.OuterHTML;
memo2.lines.Clear;
for i := 0 to Memo1.Lines.Count - 1 do
begin
  if pos('confirmaChamada(this,',Memo1.Lines.Strings[i]) > 0 then
    begin
       ShowMessage(Memo1.Lines.Strings[i]);
       pIni  := pos('this,',Memo1.Lines.Strings[i])+6;
       pFim  := pos(#39+')',Memo1.Lines.Strings[i]);
       memo2.Lines.Add(Copy(Memo1.Lines.Strings[i], pIni , pFim-pIni));  // -> TENTEI ESTE PARA ADICIONAR SOMENTE O TRECHO
       memo2.Lines.Add(Memo1.Lines.Strings[i]);  //-> TENTEI ESTE PARA "TENTAR" ADICIONAR A LINHA INTEIRA
     end;
     ShowMessage('NAO PASSOU');  // MAS EM TODAS AS TENTATIVAS... ENTRAVA AQUI.
 
end;


Parece que o problema tem a ver com o "ENTER" ( #13 + #10 ) no final de cada linha, pois parece que o HTML que está dentro do campo MEMO1, não está com este caracter, e as linhas ficam todas "bagunçadas"

Você pode me ajudar
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar