Obtenez le contenu (texte) d'une URL après que Javascript a été exécuté avec PHP

Est-il possible d'obtenir le contenu d'une URL avec PHP (en utilisant une sorte de fonction comme file_get_contents ou l'en-tête) mais seulement après l'exécution d'un code Javascript?

Exemple:

Mysite.com dispose d'un script qui charge loadUrlAfterJavascriptExec('http://exampletogetcontent.com/') et imprime / fait écho au contenu. Imaginez que certains jQuery s'exécutent sur http://exampletogetcontent.com/ qui modifient les DOM et loadUrlAfterJavascriptExec obtiendra le HTML résultant

pouvons-nous faire cela?

@Modifier

Je ne sais pas si je me suis rendu clair, mais ce que je voulais, c'était d'obtenir le contenu d'une page, via une URL, mais seulement après que Javascript soit exécuté sur la page cible (l'un des PHP obtient son contenu)

Je suis conscient que PHP s'exécute avant que la page ne soit envoyée au client, et JS seulement après cela, mais mabe, il y avait une solution de contournement experte

Mise à jour 2 Ajoute plus de détails sur la façon d'utiliser phantomjs partir de PHP.

Mise à jour 1 (après avoir précisé que javascript sur la page cible doit être exécuté en premier)

Méthode 1: utilisez phantomjs (exécutera javascript);

1. Téléchargez phantomjs et placez l'exécutable dans un chemin que votre binaire PHP peut atteindre.

2. Placez les 2 fichiers suivants dans le même répertoire:

Get-website.php

 <?php $phantom_script= dirname(__FILE__). '/get-website.js'; $response = exec ('phantomjs ' . $phantom_script); echo htmlspecialchars($response); ?> 

Get-website.js

 var webPage = require('webpage'); var page = webPage.create(); page.open('http://google.com/', function(status) { console.log(page.content); phantom.exit(); }); 

3. Naviguez vers get-website.php et le site cible, les contenus http://google.com s'affichent après l'exécution du javascript en ligne. Vous pouvez également appeler ceci à partir d'une ligne de commande en utilisant php /path/to/get-website.php .

Méthode 2: utilisez Ajax avec PHP (aucun phantomjs ne fonctionnera donc pas javascript);

/get-website.php

 <?php $html=file_get_contents('http://google.com'); echo $html; ?> 

Test.html

 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>on demo</title> <style> p { color: red; } span { color: blue; } </style> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <button id='click_me'>Click me</button> <span style="display:none;"></span> <script> $( "#click_me" ).click(function () { $.get("/get-website.php", function(data) { var json = { html: JSON.stringify(data), delay: 1 }; alert(json.html); }); }); </script> </body> </html> 

Tout le PHP s'exécute avant que l'information ne soit envoyée au client. Tous les JavaScript s'exécutent après l'envoi de l'information au client.

Pour faire quelque chose avec PHP après la chargement de la page, la page devra être soit

  1. Recharger, enregistrer les informations générées JavaScript dans un cookie ou les données POST (pas idéal) OU
  2. Faire un appel Ajax vers un autre fichier PHP pour obtenir les données. (Beaucoup mieux)

Étant donné que les données semblent être dans un fichier différent de celui de votre PHP, c'est une très bonne solution. Comme vous l'avez marqué jQuery, je suppose que vous l'utilisez.

JQuery a un ensemble de pages sur la façon dont il implémente Ajax

Mais la façon la plus simple d'utiliser jQuery pour cela est .post

ex:

 $.post( "http://example.com/myDataFile.txt", function( data ) { //do more JavaScript stuff with the data you just retrieved }); 

$.post() , comme son nom l'indique, peut envoyer des données avec la demande pour le fichier de données, donc si cette demande consiste, par exemple, à un fichier PHP, le fichier PHP peut utiliser ces données.

ex:

 $.post( "http://example.com/myDataFile.txt", { foo: "bar"; yabba: "dabba" }, function( data ) { //do more JavaScript stuff with the data you just retrieved }); 

Les données doivent être au format JSON dans les paires clé / valeur.