Comment obtenir une réponse JSON à partir d'un Google Chrome Selenium Webdriver client?
Actuellement, j'ai le Sélénium accroché à python pour gratter une page web. J'ai trouvé que la page en fait extrait des données à partir d'une API JSON, et je peux obtenir une réponse JSON tant que je suis connecté à la page.
Cependant, mon approche de l'obtention de cette réponse en python semble un peu junky; je sélectionne le texte placé dans <pre>
balises et utiliser python json
paquet pour analyser les données comme suit:
import json
from selenium import webdriver
url = 'http://jsonplaceholder.typicode.com/posts/1'
driver = webdriver.Chrome()
driver.get(url)
json_text = driver.find_element_by_css_selector('pre').get_attribute('innerText')
json_response = json.loads(json_text)
La seule raison pour laquelle j'ai besoin de sélectionner au sein de <pre>
balises est que lorsque JSON s'affiche dans Chrome, il est livré formaté comme ceci:
<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}</pre>
</body>
</html>
Et la seule raison pour laquelle j'ai besoin de le faire à l'intérieur de sélénium est parce que j'ai besoin d'être connecté sur le site afin d'obtenir une réponse. Sinon je obtenir un 401 et pas de données.
OriginalL'auteur Roger Filmyer | 2016-05-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez trouver le
pre
élément et obtenir du texte, puis de le charger viajson.loads()
:Aussi, vous pouvez éviter d'utiliser
selenium
pour obtenir les données JSON et transférer les biscuits deselenium
àrequests
continuer à "rester connecté", voir:<pre>
méthode fonctionne (même si.text
est certainement plus agréable que mon approche.get_attribute('innerText')
)...2. TIL sur
requests
's cookies de soutien. J'ai réussi à éviter un autre chargement de la page de ce 7MO angulaire application de l'enfer, se raser quelques secondes de mon script moment de l'exécution, et d'écrire plus propre code. Merci!pour ceux d'entre vous qui ont des problèmes avec firefox autoformating la réponse json dans une table et modification de la source: ajouter "view-source:" en face de votre url. Ensuite, vous pouvez continuer à l'aide de la recherche par tag "pré".
OriginalL'auteur alecxe