Récupération de données "dynamiques" dans une page Web

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut tous le monde :)

J'ai une question Web pour vous, et je suis sûr que vous allez pouvoir m'aider :)

Je cherche à récupérer une valeur dynamique sur une page web. Je m'explique:

  • Si je fais afficher le code source avec mon navigateur préféré, cette valeur est mise à 00
  • Si je fais inspecter l'élément, alors là, on voit que la valeur change toute les 2 secondes.

Je voudrais récupérer cette valeur mais la fonction PHP "file_get_contents()" me retourne la même chose qu'un coup de "afficher le code source". Donc je voulais savoir si vous aviez une idée pour extraire cette valeur ?

Merci d'avance pour vos réponses ;)

Édité par Coyote

+0 -0

Salut,

Cette valeur est sûrement modifiée par javascript, donc je te conseille d'examiner le code javascript de la page pour comprendre comment elle est modifiée.

Édité par rom1504

+0 -0
Auteur du sujet

Mmh, j'ai fais pas mal de recherche autour de ses fichiers javascript, en effet c'est bien içi que la valeur est modifié sous-forme d'une variable.

Mais je ne pourrais pas la récupérer par ce biais … Ou alors je me trompe ?

Édité par Spit

+0 -0
Auteur du sujet

Victor: Je ne sais pas, apparemment la variable qui semble correspondre est déclaré dans le javascript .. Mais j'ai jamais touché au JSON donc je vois pas trop ce que tu entend par "tu dois pouvoir récupérer la valeur directement depuis là"

rom1504: "La procédure" ? C'est à dire ?

+0 -0

Ça va être compliqué de te répondre plus précisément sans plus de détail sur le js en question, mais par exemple s'il y a var a=2+3; il te suffit de faire 2+3 dans ton code pour obtenir la valeur (en vrai ce sera plus compliqué que 2+3, enfin j'espère…)

+0 -0
Auteur du sujet

Non, c'est un calcul réalisé à partir de l'heure du serveur sur lequel la page est hébergée.

Mais y a aucun moyen de lire une variable qui s'affiche ? Si elle s'affiche sur ma page web, je dois bien pouvoir la récupérer d'une façon où d'une autre non ?

+0 -0

Cette réponse a aidé l'auteur du sujet

Pour être clair : tu fais une requête à un serveur distant (GET http://lesite.com/lapage), ton navigateur et file_get_contents font exactement la même chose.

Le serveur distant te renvoie une page HTML, à partir de là, son boulot est terminé.

Dans ce fichier HTML, il y a un monceau de code JS qui, lui, doit être exécuté par ton client.

Dans le cas de ton navigateur, le client c'est lui, il passe donc par son moteur Javascript pour interpréter et exécuter le code qu'il trouve dans la page. Potentiellement, il va modifier des "objets" dans la page.

Dans le cas de file_get_contents, bah tu n'as tout simplement pas de client derrière pour interpréter le code JS…

Donc soit :

1/ Tu passes par un moteur de rendu JS (je ne sais pas du tout ce qui existe / se fait en PHP, ça existe en Java)

2/ Tu laisses tomber file_get_contents et tu utilises un navigateur embarqué (selenium ou plein d'autres trucs) qui sache exécuter du code client et te permettre d'inspecter la valeur de cette variable quand tu le souhaites.

3/ Soit tu reproduis le comportement du client par reverse engineering : comment récupère-t-il l'heure du serveur ? (champ Datedu header de la réponse HTTP ? c'est le plus classique. API REST ?) et qu'est-ce-qu'il en fait par la suite ?

Bref, pour t'amener vers la bonne solution il faut qu'on comprenne ce dont tu as besoin de façon précise (comme souvent) parce que là, tout ce qu'on sait c'est que du code JS est exécuté et fait un calcul sur une date. La belle affaire…

Happiness is a warm puppy

+1 -0
Auteur du sujet

Héééé faut pas me disputer :(

Tes éléments de réponses devraient me permettre d'arriver à mes fins, dans l'immédiat, je n'ai pas le temps de me pencher dessus, mais ça m'as l'air d'être de bonnes pistes :)

Si jamais j'ai d'autre questions je repasserais, sinon, je mettrais le post en résolu ;)

+0 -0

Je ne t'ai absolument pas disputé, ne t'en fais pas :)

Ça peut te paraître sec mais c'est juste formel pour pas te paumer. Et par contre oui, c'est difficile de t'aider sans savoir précisément ce que tu veux faire, j'ai jamais trop compris pourquoi pas mal de gens restent très évasifs quand ils posent une question ?

Tu ne peux pas donner l'URL du site en question ? Nous expliquer ce que tu veux faire en détail etc. ? Ça nous permettrait de mieux t'aider :)

Happiness is a warm puppy

+0 -0
Auteur du sujet

Je préférerais évité, d'habitude ça ne me pose pas de problèmes, mais là, c'est un cas un peu sensible :)

Je peux essayer de trouver un exemple par contre ;)

Mais je pense que tu as bien répondu, enfin ça m'as tout l'air d'être le comportement que j'observe ;)

EDIT: J'ai trouvé, c'est exactement le même comportement que j'observe

Édité par Spit

+0 -0

Ca n'aide pas beaucoup…

De ce que je comprends, tu veux faire un compte à rebours en Javascript ?

Y'a des tonnes et des tonnes de ressources sur le net pour faire ça.

Happiness is a warm puppy

+0 -0
Staff

On va gagner du temps : Ce que tu veux faire ce n'est pas pouvoir détecter quand le compte a rebour d'un site de téléchargement par DirectDownload arrive a terme pour lancer et automatiser le téléchargement d'un liens ?

Si oui il va nous falloir le site d'origine. On a bien compris qu'il a sur ta page un chronometre en javascript, mais il faut voir le code pour savoir ce qui se passe.

NB: Si le temps est fixe ("toujours 30 sec à attendre"), il te suffit d'attendre les 30 sec avec un sleep.

+0 -0
Auteur du sujet

Non je cherche pas à coder mon propre compte à rebours :P

Admettons que je voudrais afficher sur une autre page web (que j'héberge moi même) la valeur du compte à rebours d'une autre page comme celle que j'ai mis en exemple …

Dans l'exemple que je t'ai donné, le compte à rebours est déclenché par le client, mais si celui-ci décompte en permanence, y a t-il un moyen d'afficher sur ma propre page la valeurs des secondes ?

Ce que je comprends pas c'est que la valeur changeant constamment tu veux la récupérer quand ? Enfin si j'ai bien compris le problème …

regz

Tout le temps ? Enfin avec un taux de rafraîchissement le plus rapide possible …

NB: Si le temps est fixe ("toujours 30 sec à attendre"), il te suffit d'attendre les 30 sec avec un sleep.

Kje

Et non, le temps n'est pas "fixe" :/

+0 -0
Staff

Je vais sur-simplifier les options qui s'offrent à toi. En gros tu as deux solutions :

  • Soit tu va décortiquer toi même le code js de la page pour savoir ce qui se passe.
  • Soit tu nous dis de quel site il est question pour qu'on puisse réellement t'aider plutôt que spéculer.

C'est l'un ou l'autre. Sans plus de détails il y a beaucoup trop de possibilités pour qu'on puisse t'aider. A toi de voir.

+0 -0

Selon moi, ce que tu cherches à faire ne sera possible que si tu connais la valeur initiale du compte à rebours (puisqu'elle change).

A ce moment, tu lanceras, toi-même ton propre compte à rebours. Ils ne seront pas franchement synchrones mais c'est le mieux que tu puisses espérer.

Sans connaître le site, impossible de connaître cette valeur initiale.

Et très honnêtement, j'ai pas très très envie de jouer aux devinettes avec des "admettons que" :\ On va forcément t'envoyer sur une fausse piste à un moment ou à un autre.

Happiness is a warm puppy

+0 -0

En gros tu veux communiquer des valeurs d'une page client à une autre page client tous simplement ? Est-ce que l'évolution des valeurs est logique (compte à rebours, incrémentation ou meme totues évolution faite par un algo mais sans aucune intervention de l'utilisateur) ou est-ce que l'utilisateur pourrra entraver l'évolution d'un moyen ou d'un autre (rentrer lui meme des valeurs, accélélerer l'évolution si évolution il y a …) ?

+0 -0
Auteur du sujet

J'ai fais pas mal de recherche, je savais que ce domaine avait un nom particulier: Le web scraping. J'ai plus qu'a recherché comment ça se passe pour le JS et voir si y a des outils qui me permettent de faire ça facilement.

Je passe le sujet en résolu !

Merci pour vos réponses, elles m'ont apportées de bonnes pistes de recherches :)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte