Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

URL planquée

+2 votes

Connaîtriez-vous un moyen de récupérer une "URL planquée"? Explication: je bosse sur une base de donnée en ligne, avec des pages dédiées, des views, des tabs etc (Shotgun, pour citer le bousin).
J'ai une page qui contient plusieurs views, mais dont l'URL "visible" ne change pas quand je passe d'une view à l'autre. Or j'ai besoin de pouvoir appeler une view en particulier.
Je me suis plongé dans le code source de la page, je suis allé chercher dans les scripts JS et je pense avoir trouvé l'endroit où c'est défini mais
1. je ne code pas en JS (donc compréhensio partielle)
2. je n'ai de toute façon pas accès au code source autrement qu'en lecture.

Bref, je me demandais si vous sauriez comment récupérer ce genre de données (j'ai regardé le tuto sur BeautifulSoup mais ça n'a pas résolu mon souci).

demandé 21-Oct-2015 par furankun (1,434 points)

Comment on passe d'une view à l'autre, concrètement ? Est-ce que le HTML contient toutes les views que tu veux extraire, ou bien il est mis à jour dynamiquement ?

Si tu as une page exemple à montrer, ça serait un peu plus facile de chercher une solution.

On passe d'une view à l'autre en sélectionnant celle qu'on veut afficher dans un menu déroulant. Celui-ci est peuplé dynamiquement en fonction des views qui ont été créées dans l'éditeur du soft. J'ai trouvé la boucle JS qui gère ce peuplement.
Je ne sais pas si ça répond à la question :-/

Est-ce que le code JS charge de nouvelles données, et ce sont ces données qu'il te faut, ou bien est-ce seulement une mise en forme ?

très honnêtement , j'en sais rien :(

Si tu utilises Firefox tu peux vérifier assez facilement en utilisant l'onglet Réseau (CTRL+MAJ+Q). Une fois que ta page est complètement chargée, tu clique sur ton menu déroulant. S'il y a de nouvelles requêtes tu pourras peut-être trouver dedans le fichier JSON ou HTML qui contient ce que tu cherche. Sinon, utilise Selenium.

1 Réponse

+4 votes
 
Meilleure réponse

Utilise Selenium : tu pourras manipuler un navigateur (PhantomJS par exemple) en passant par du code Python, ça sera plus simple mais moins performant que BeautifulSoup. Autrement, il faut plus d'infos comme le fait remarquer yoch en commentaire.

Par exemple, si le bouton te permettant de changer de vue est identifié par #bouton, et en supposant que tu ai installé Selenium avec un petit pip install selenium :

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.PhantomJS()
driver.get("http://example.org/page_de_base")
bouton = driver.find_element_by_name("bouton")
bouton.send_keys(Keys.RETURN)
driver.close()
répondu 21-Oct-2015 par yomytho (296 points)
sélectionné 4-Nov-2015 par furankun

ooOOOOOOoooh j'ai des étoiles dans les yeux là!

...