① 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
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()
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