Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jessica Ferreira

[Resolvido] DOMDocument();

Recommended Posts

Olá, quero saber se é possivel interatir com um arquivo js pelo DomDocument()

 

<?php
$myhtml = <<<EOF

document.write('<a href="weblink"></a>');


EOF;

$doc = new DOMDocument();
$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag) {
      echo $tag->getAttribute('href');
}
?>

 

o código acima funciona, no entando se eu criar um arquivo js com o mesmo conteúdo do código acima:

document.write('<a href="weblink"></a>');

 

como chamar ? a tag <script> parece que não funciona, então como seria o <script src="arquivo.js"></script>

 

help

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isso mesmo, mais esse javascript que escreve está sendo chamado <script src="..."></script> por ele ser chamado não sei como funciona

 

Então, você tem que mandar uma requisição para a própria página que contém a interpretação do código JS, pra isso você pode utilizar file_get_contents

http://php.net/file_get_contents

Compartilhar este post


Link para o post
Compartilhar em outros sites

   $js = <<<JSCODE
<script>
  document.write('<a href="weblink"></a>');
</script>
JSCODE;

 

ve que bicho da isso..

Compartilhar este post


Link para o post
Compartilhar em outros sites

   $js = <<<JSCODE
<script>
  document.write('<a href="weblink"></a>');
</script>
JSCODE;

 

ve que bicho da isso..

 

Não é isso Luis Paullo, ela tem um code JS que escreve os links na página, porém estes não são estáticos, são escritos dinamicamente com JavaScript, daí ela quer pegar todos os links depois que eles foram escritos, como se eles estivessem na página em SI, entendeu ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

   $js = <<<JSCODE
<script>
  document.write('<a href="weblink"></a>');
</script>
JSCODE;

 

ve que bicho da isso..

 

é realmente seu conselho não deu certo...

 

Não é isso Luis Paullo, ela tem um code JS que escreve os links na página, porém estes não são estáticos, são escritos dinamicamente com JavaScript, daí ela quer pegar todos os links depois que eles foram escritos, como se eles estivessem na página em SI, entendeu ?

 

 

tentei assim mais não olha:

 

<?php
$myhtml = <<<EOF

echo file_get_contents('arquivo.js');

EOF;

$doc = new DOMDocument();
@$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag) {
      echo $tag->getAttribute('href');
}
?>

 

arquivo.js

 

document.write('<a href="weblink"></a>');

 

com file_get_contents não funcionou também! :\

 

Opaa...

tentei assim agora deu certo:

<?php

$doc = new DOMDocument();
@$doc->loadHTML(file_get_contents('arquivo.js'));

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag) {
      echo $tag->getAttribute('href');
}


?>

 

obrigad pela ajuda :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não foi isso que eu quis dizer, estou falando para você mandar uma requisição para a página que interpreta o JS, e evite suprimir erros, tire esse '@' daí, e terá erros de entidade ..

 

file_get_contents('http://seusite.com.br/pagina.html');

 

Essa pagina.html é quem chama o script arquivo.js que por sua vez, vai escrever o link na página em si, daí você vai poder manipular toda a saída com o DOMDocument.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a tha=D

 

file_get_contents funciona.. mais você tem que gerar os links em um HTML..

 

link.html

<html>
<script src="arquivo.js"></script>
</html>

<?php
$myhtml = <<<EOF

echo file_get_contents('link.html');

EOF;

$doc = new DOMDocument();
@$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach ($tags as $tag) {
      echo $tag->getAttribute('href');
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andrey Knupp

se oque você disse foi oque o Luis Paullo colocou como exemplo não funciona

coloquei o @ porque sem ele tava apresentando erros...

 

fico imaginando como chamar a biblioteca jquery, vai ter que ser carregada direta igual eu fiz lá com arquivo.js

porque se alterar pelo link.html que chama o arquivo.js não vai funciona...

 

....

<?php
      $dom = new DOMDocument();
      $dom->loadHTML( file_get_contents('index.html') );
      $nodes = $dom->getElementsByTagName( 'a' );

      foreach( $nodes as $node ){
             echo $node->getAttribute( 'href' ) ;
      }

 

é desse jeito aqui não funcionou... tem que chamar direto pelo js estranho né

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade tem uma pegadinha ai, chamando o arquivo.js não quer dizer que o javascript funcionou, a classe do php interpreta só o html então document.write('<a href="link></a>'); só vai ser interpretado <a href="link></a> como estava pegando só o link parece que era o javascript que tava sendo executado, mais mostrando tudo o document.write é exibido como texto rs.. enfim o javasript não está a funcionar só o html

 

   $js = <<<JSCODE
<script>
  document.write('<a href="weblink"></a>');
</script>
JSCODE;

 

ve que bicho da isso..

 

aonde você tirou esse <<<JSCODE procurei e procurei e não achei nada, e também não funciona, tem no php.net ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

link

 

=X

 

(ZEBRA)...

JSCODE - peguei um codigo de um gringo que tinha isso.. =D

 

realmente num achei essa bagaça no manual =X

 

mais a função do topico com JSCODE funciona normal.. ela executa o javascritp..

 

quando vi sua duvida achei que daria certo...

 

to tentando entende oq você quer com isso e não consigo =X

Compartilhar este post


Link para o post
Compartilhar em outros sites

link

 

=X

 

(ZEBRA)...

JSCODE - peguei um codigo de um gringo que tinha isso.. =D

 

realmente num achei essa bagaça no manual =X

 

mais a função do topico com JSCODE funciona normal.. ela executa o javascritp..

 

quando vi sua duvida achei que daria certo...

 

to tentando entende oq você quer com isso e não consigo =X

 

 

funciona nada, mostra um exemplo para mim talvez esteja fazendo algo errado :pinch:

 

edit---

 

legal o seu debugger ia comenta lá fecharam o tópico rs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem o JSCODE na class debugger do topico =X

 

e ele funciona...

 

de verdade você tem razão, funciona mais se você for salvar a variavel $js vai salvar tudo...

 

encontrei um projeto maneiro que armazena a execução do javascript em cache e trabalha junto com o php para usar é tipo assim:

 

include("js.php");
$js = js('
  print("JAVASCRIPT");
');

$fp = fopen("phpandjs.txt", "a");
$escreve = fwrite($fp, $js);
fclose($fp);

 

só salva a execução do js

 

mais tem vários bugs ainda, "aspas" da problema, tem erros de cache também e entre aspas " é lento ";

mais a iniciativa é boa tava olhando o fonte é até que é bem estruturado...

 

mais meu, deixa isso pra pra lá... restam apenas 11 meses para o mundo acabar para que se preocupar com isso, já fis oque tinha faser thanks

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.