Python VBA pour obtenir une capture de la page WEB entière avec Selenium

Python VBA pour obtenir une capture de la page WEB entière avec Selenium

point

① Utilisez du chrome ② Faites-le sans tête ③ Obtenez les longueurs verticale et horizontale de chaque page avec javascript, définissez-les et obtenez une capture. ④ Si vous pensez que le site expirera soudainement, vous pouvez redémarrer Chrome.

Les demandes d'acquisition de capture arrivent soudainement, vous devez donc faire attention à ne pas manquer une capture rapidement. Pour cela, assurez-vous que la capture est effectuée dans le dossier spécifié à la fin. S'il expire, redémarrez Chrome et vous pourrez continuer à capturer. C'est le moyen le plus simple d'écrire rapidement un programme. Mais c'est plutôt bien.

■ Environnement ・ Windodws10 ・ Python 3.8.3

Obtenez une capture de la page Web entière avec python sélénium

Obtenez une capture de la page WEB entière


from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


options = Options()
options.add_argument('--hide-scrollbars') #Désactivez la barre de défilement
options.add_argument('--incognito')        #Mode secret
options.add_argument('--headless')         #Sans tête (le navigateur disparaît, c'est une bonne idée d'ajouter cette option après le test)
driver = webdriver.Chrome(options=options) #Description lorsque le chemin passe

try:
  WebDriverWait(self.driver, 15).until(EC.presence_of_all_elements_located)
  driver.get("https://testtesttest.com")  
 #↑ Déplacer vers l'URL à capturer Parce qu'un site avec beaucoup d'images et de publicités peut soudainement provoquer une erreur de timeout.
except Exception:
   #Écrivez une description du redémarrage du pilote ici
   

#Obtenez la taille verticale et horizontale et obtenez la capture
page_width = driver.execute_script('return document.body.scrollWidth')
page_height = driver.execute_script('return document.body.scrollHeight')        
driver.set_window_size(page_width, page_height)

#Obtenir l'heure actuelle du nom de fichier
now = datetime.datetime.now()
zikan = now.strftime('%Y%m%d_%H%M%S')
filename = "nom de fichier"+ "_"+ zikan + ".jpg "   #L'extension peut être un ping

#Obtenez une capture
driver.save_screenshot("./Nom de dossier/" + filename)

#Recherchez un fichier de capture pendant 5 secondes maximum
start=time.time()
while time.time()-start<=5:
  if os.path.exists(./Nom de dossier/+filename):
      break      #Quitter lorsque le fichier est trouvé
      time.sleep(1)
else:
  #Ecrire ce qu'il faut faire si la capture n'est pas trouvée

driver.quit()

Obtenez une capture de la page Web entière avec vba selenium Basic

Lors de l'utilisation avec vba Étant donné que de nombreux fichiers Excel sont souvent en cours d'exécution, la destination d'enregistrement de la capture est Il est décrit comme un chemin complet au lieu d'un chemin relatif. D'après mon expérience, les sites avec beaucoup d'images et de publicités ont soudainement de fréquentes erreurs de temporisation. Même dans ce cas, si je mets dans le processus de redémarrage avec ma propre fonction OnceMoreGet, il se poursuit sans s'arrêter.

Obtenez une capture de la page WEB entière


Dim deiver as New ChromeDriver
Dim tate As Long
Dim yoko As Long
Dim Target as String
driver.AddArgument "headless" 'Sans tête
driver.AddArgument "disable-gpu" 'Options temporairement nécessaires. Cela peut être inutile, mais juste au cas où
driver.AddArgument "incognito"   'Mode secret
driver.AddArgument "hide-scrollbars"  'Désactivez la barre de défilement

'Réglez le temps d'attente pour la lecture et le délai d'expiration de 30 secondes
driver.Timeouts.PageLoad = 30000        
driver.Timeouts.Server = 30000
driver.Timeouts.ImplicitWait = 30000
driver.Timeouts.Script = 30000
driver.Start

'Simple pour les sites légers qui ne dépassent pas le temps
'driver.get("URL du site")D'accord
'↓ est une fonction qui redémarre lorsqu'un timeout survient après une transition d'écran
If Not OnceMoreGet(driver, "URL du site") Then     
     'Si le redémarrage échoue après l'expiration du délai, écrivez un traitement ici
End If

'Processus d'acquisition de capture
tate = driver.ExecuteScript("return document.body.scrollHeight")
yoko = driver.ExecuteScript("return document.body.scrollWidth")
driver.Window.SetSize yoko, tate
Target = "Entrez le nom du fichier ici avec le chemin complet"

'Capture d'écran: Il peut y avoir une erreur ici, il est donc préférable d'avoir un processus d'évitement des erreurs.
driver.TakeScreenshot.SaveAs (Target)      

'Utilisez la fonction Dir pour vérifier si la capture est possible.
Dim timeout As Date
timeout = DateAdd("s", 5, Now)
Dim str As String
Do
  str = Dir(Target)
  If Now > timeout Then
     'Ecrire le traitement lorsque seul le fichier de capture est introuvable
  End If   
    
Loop Until str <> ""

driver.quit

'Une fonction qui redémarre lorsqu'une erreur de délai d'attente se produit
Function OnceMoreGet(driver As ChromeDriver, url As String) As Boolean
  On Error GoTo ErrorHandler
    diver.Get (url)        
    OnceMoreGet = True
    Exit Function        
ErrorHandler:
    'Redémarrez si une exception se produit
    driver.Quit
    Call WaitFor(3)
    driver.Start
    driver.Get (url)
    OnceMoreGet = True
End Function

Un amateur écrit tout seul. J'apprécierais tout conseil ou commentaire.

Recommended Posts

Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Récupérer l'appelant d'une fonction en Python
Obtenez la valeur sélectionnée dans le menu déroulant Selenium Python VBA
Obtenez le nombre d'éléments spécifiques dans la liste python
Comment déterminer l'existence d'un élément sélénium en Python
[python, ruby] sélénium-Obtenez le contenu d'une page Web avec le pilote Web
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
[Python] Récupérez les fichiers dans le dossier avec Python
Copiez la liste en Python
Sortie sous la forme d'un tableau python
Touchons une partie de l'apprentissage automatique avec Python
Obtenez une instance datetime à tout moment de la journée en Python
Comment obtenir une liste de fichiers dans le même répertoire avec python
Comment obtenir le nombre de chiffres en Python
[python] Récupère la liste des classes définies dans le module
Obtenir la taille (nombre d'éléments) de Union Find en Python
Obtenez l'URL de la destination de la redirection HTTP en Python
Un mémorandum sur la mise en œuvre des recommandations en Python
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
Découvrez la largeur apparente d'une chaîne en python
Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
Obtenez la page Web Python, encodez et affichez les caractères
[Note] Importation de fichiers dans le répertoire parent en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Trouver les valeurs propres d'une vraie matrice symétrique en Python
Obtenez l'index de chaque élément de la matrice de confusion en Python
Récupérez la source de la page à charger indéfiniment avec python.
Obtenez le chemin du bureau en Python
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Obtenez une capture d'écran Web avec python
Obtenez le chemin du script en Python
[OCI] Script Python pour obtenir l'adresse IP d'une instance de calcul dans Cloud Shell
Accédez à l'API Web en Python
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Comment vérifier la taille de la mémoire d'une variable en Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
Une fonction qui mesure le temps de traitement d'une méthode en python
[python] Obtenez le rang des valeurs dans la liste par ordre croissant / décroissant
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
J'ai écrit un script pour extraire les liens de pages Web en Python
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
Créez une fonction pour obtenir le contenu de la base de données dans Go
Obtenez la formule dans le fichier Excel sous forme de chaîne en Python
Obtenez une liste de fichiers dans un dossier avec python sans chemin
Obtenez le titre et la date de livraison de Yahoo! News en Python
Vérifiez le comportement du destroyer en Python
Ecrire le test dans la docstring python
Afficher une liste d'alphabets en Python 3
[Python] [Windows] Faites une capture d'écran avec Python
Exécuter l'interpréteur Python dans le script
Le résultat de l'installation de python sur Anaconda