12
votes

Économiser le contenu de la page complète en utilisant sélénium

Je me demandais quelle est la meilleure façon d'enregistrer tous les fichiers récupérés lorsque Selenium se rend dans un site. En d'autres termes, lorsque Selenium visit http://www.google.com Je souhaite enregistrer le HTML, JavaScript ( Y compris les scripts référencés dans les balises SRC), les images et la teneur potentiellement contenues dans les iframes. Comment cela peut-il être fait?

Je sais que gethtmlsource () retournera le contenu HTML dans le corps du cadre principal, mais comment peut-on être étendu pour télécharger l'ensemble complet de fichiers nécessaires pour que cette page soit à nouveau. Merci d'avance!


3 commentaires

Avez-vous trouvé quelque chose?


La partie de contenu dynamique est très délicate. Peut-être utiliser le chromedriver (en mode sans tête) et son protocole DEVTools pour interfacer avec le panneau STATS réseau. IDK si cela inclura le contenu de l'iframe.


J'ai compris comment utiliser le sélénium et le chrome sans tête pour cela ... C'est assez compliqué cependant, mais j'ai créé une petite application Python qui le fait: github.com/jorgeorpinel/site-page-size-scrapper


4 Réponses :


7
votes

sélénium n'est pas conçu pour cela, vous pouvez soit:

  1. Utilisez gethtmlsource et analysez le HTML résultant pour les références à des fichiers externes, que vous pouvez ensuite télécharger et stocker en dehors du sélénium.
  2. Utilisez autre chose que Selenium pour télécharger et stocker une version hors ligne d'un site Web - je suis sûr qu'il y a beaucoup d'outils pouvant le faire si vous faites une recherche. Par exemple, wget peut effectuer un téléchargement récursif ( http://fr.wikipedia.org/wiki/wget# Récursive_download )

    Y a-t-il une raison pour laquelle vous voulez utiliser sélénium? Est cette partie de votre stratégie de test ou souhaitez-vous simplement trouver un outil qui créera une copie hors ligne d'une page?


4 commentaires

La raison pour laquelle nous voulons utiliser le sélénium est parce qu'il analyse JavaScript qui est essentielle pour reconstruire une page entière (y compris la circulation publicitaire).


Dans mon cas, je voudrais accomplir le téléchargement avec sélénium pour des raisons de vitesse. Je dois quand même charger la page dans Selenium et Chrome, je préférerais ne pas exécuter à nouveau toutes les demandes HTTP et pour simplement enregistrer ce que j'ai actuellement chargé.


+1 - Wget s'est révélé être une solution parfaite pour ce dont j'avais besoin. Essentiellement appeler une URL Web (qui était générée dynamiquement PDF) avec l'intention de sauver le résultat en tant que PDF localement.


Cependant, bien que WGET puisse télécharger des ressources externes pour un site, il ne peut pas traiter les appels de ressources imbriqués qui se produisent sur des sites modernes, tels que Javascripts qui chargent un autre JavasCrips après avoir récupéré certaines informations sur le navigateur.



1
votes

Un bon outil pour cela est http://www.htttrack.com/ , sélénium ne fonctionne pas fournir une API pour cela. Si vous auriez besoin de sauvegarder le contenu complet d'une page à partir de votre cas de test en sélénium, vous pouvez peut-être exécuter htttrack en tant qu'outil de ligne de commande.

merci


0 commentaires

0
votes

Si vous voulez vraiment utiliser selenium, ce que vous pouvez faire est d'émuler ctrl + s pour enregistrer la page, mais il est plus difficile / difficile (également dépendant) pour imiter la pression sur Entrez ou en modifiant l'emplacement de l'endroit où vous souhaitez enregistrer la page Web et son contenu.

Je voulais faire la même chose avec sélénium mais réalisé que je pouvais simplement utiliser des outils tels que wget et je n'avais vraiment pas besoin d'utiliser Selenium .. donc j'ai fini par utiliser wget , c'est vraiment puissant et cela fait exactement ce dont j'ai besoin.

Voici comment vous le feriez en utilisant wget à partir d'un script Python: xxx

Les args passés sont juste pour faire Il est possible de visualiser la page hors ligne comme si vous êtes toujours en ligne. xxx


2 commentaires

mais wget n'exécute pas JavaScript


J'ai essayé cela et tout ce qu'il est retourné était une 1 ma fenêtre interactive. Pas de sortie dans mon annuaire.



0
votes

La seule méthode intégrée Selenium a pour télécharger le contenu source est xxx pré>

mais qui ne télécharge pas toutes les scripts d'images, CSS et JS, comme si vous utilisiez Ctrl + s sur une page Web. Vous devrez donc imiter les touches CTR + S après que vous naviguez vers une page Web comme algorithmatique a indiqué. P>

J'ai fait un gist pour montrer comment ça fait. https://gist.github.com/grilledchickenthighs/211c307edf8f828806C4BB4E4707B106 P>

# Download entire webpage including all javascript, html, css of webpage. Replicates ctrl+s when on a webpage.

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

def save_current_page():      
    ActionChains(browser).send_keys(Keys.CONTROL, "s").perform()


0 commentaires