Écraser le fichier de téléchargement pour python selenium Chrome

sélénium pratique. .. Cependant, il est difficile à utiliser.

Afin de résoudre ces quatre points, j'ai créé une classe d'héritage Chrome afin qu'elle puisse être utilisée facilement.

Il y a plus d'arguments d'initialisation que la classe standard, mais pour l'instant, il est facile à utiliser. Si j'ai le temps, j'ajouterai l'ouverture de chaque processus à une date ultérieure.


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import selenium.webdriver
import os
import time
import shutil
from tempfile import TemporaryDirectory
from os.path import isdir, exists, join as pathjoin

class _tmpdir(TemporaryDirectory):
    def __del__(self):
        self.cleanup()

class ChromeOpen(selenium.webdriver.Chrome):
    def __init__(self, init_url=None, executable_path="chromedriver", port=0,
                 options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None,
                 keep_alive=True,
                 download_dir=None, background=False, timeout=300,
                 disable_extensions=True, maximized=False,
                 proxy_direct=True):

        self.init_url = init_url
        self._tmpdir = None
        self.options = options or selenium.webdriver.ChromeOptions() # *3
        addarg = self.options.add_argument
        addarg('--ignore-certificate-errors-spki-list')
        addarg('--ignore-certificate-errors')
        addarg('--ignore-ssl-errors')

        if background:
            addarg('--headless')
        if disable_extensions:
            addarg('--disable-extensions')
        if maximized:
            addarg('--start-maximized')

        if proxy_direct:
            addarg('--proxy-server="direct://"')
            addarg('--proxy-bypass-list=*')

        self.prefs = {
            "plugins.plugins_list":
                [{"enabled": False,
                 "name": "Chrome PDF Viewer"}],
            "download.extensions_to_open": "application/pdf",
        }

        self.download_dir = download_dir

        if self.download_dir:
            if not exists(self.download_dir):
                raise FileNotFoundError("Not Found Directory {}".format(self.download_dir))

            if not isdir(self.download_dir):
                raise NotADirectoryError("Not a Download directory {}".format(self.download_dir))

            self.prefs.update({"download.default_directory": self.tmpdir.name}) # *2

        self.options.add_experimental_option("prefs", self.prefs)

        super().__init__(
            executable_path=executable_path,
            port=port,
            options=self.options,
            service_args=service_args,
            desired_capabilities=desired_capabilities,
            service_log_path=service_log_path,
            keep_alive=keep_alive,
        )

        if timeout > 0:
            self.set_page_load_timeout(timeout) # *1
            self.set_script_timeout(timeout)    # *1

        if self.init_url:
            self.get(self.init_url)

        self.xpath = self.find_element_by_xpath  # *4

    @property
    def tmpdir(self): # *2
        if self._tmpdir is None:
            self._tmpdir = _tmpdir()
        return self._tmpdir

    def pagetop(self):
        self.execute_script("window.scrollTo(0, 0);")

    def pageend(self):
        self.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    def organize_download_files(self): # *2
        for fn in os.listdir(self.tmpdir.name):
            if fn.endswith(".crdownload"):
                time.sleep(0.5)
            else:
                src = pathjoin(self.tmpdir.name, fn)
                dst = pathjoin(self.download_dir, fn)
                if exists(dst):
                    if isdir(dst):
                        shutil.rmtree(dst)
                    else:
                        os.remove(dst)
                shutil.move(src, dst)

    def wait_for_downloads(self): # *2
        while len(os.listdir(self.tmpdir.name)):
            self.organize_download_files()


    def quit(self):
        if self.download_dir:
            self.wait_for_downloads() # *2
        if self._tmpdir:
            self._tmpdir.cleanup()
        super().quit()

Après avoir initialisé la classe Chrome, je ferai immédiatement driver.get (url), donc Pour le premier argument, entrez l'URL d'affichage initiale. Les arguments fréquemment utilisés, etc. sont regroupés dans init et définis comme valeur par défaut. Lors de son utilisation, c'est un coup comme suit.


with ChromeOpen("https://www.google.com", download_dir="C:/temp/hoge") as driver:
    search = driver.xpath('//*[@name="q"]')
    search.send_keys("hoge")
    search.submit()
    driver.pageend() #Faire défiler jusqu'à la dernière ligne des résultats de recherche
    time.sleep(3) #Il se ferme en un instant, alors attendez 3 secondes

Send_keys est également gênant, donc je veux faire quelque chose à ce sujet.

Recommended Posts

Écraser le fichier de téléchargement pour python selenium Chrome
Selenium + WebDriver (Chrome) + Python | Création d'un environnement pour le scraping
Définir le dossier de téléchargement par défaut pour le pilote Chrome de Selenium
Attente de téléchargement dynamique Python Selenium
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
[Python + Selenium] Conseils pour le grattage
Télécharger le fichier csv avec python
Téléchargement de fichiers implémenté avec Python + Bottle
Notes pour l'entrée / sortie de fichier Python
Télécharger Python
Comment installer automatiquement le pilote Chrome pour la version Chrome avec Python + Selenium + Chrome
Lire le fichier CSV avec python (Télécharger et analyser le fichier CSV)
Téléchargez le fichier en spécifiant la destination de téléchargement avec Python & Selemiun & Chrome (version Windows)
30/10/2016 else pour Python3> pour:
python [pour moi]
Fichier python de script
[Python / Selenium] XPath
J'ai créé un fichier de dictionnaire python pour Neocomplete
Télécharger le PDF avec sélénium chromedriver (Chrome 57) + (Autres notes)
Fonctionnement automatique de Chrome avec Python + Sélénium + pandas
Essayez d'exécuter Google Chrome avec Python et Selenium
Traitement de fichiers Python
[Python / Chrome] Paramètres de base et opérations de scraping
Téléchargez des fichiers tout en affichant la progression dans Python 3.x
Étude de l'automatisation des pas des applications correspondantes (Python, Selenium, BeautifulSoup,)
Notez les options fréquemment utilisées dans Python + Selenium + Chrome
Programme Python qui recherche le même nom de fichier
Automatisez Chrome avec Python et Selenium sur votre Chromebook
À propos de Python for loop
Opérations sur les fichiers en Python
[Python] Opération de fichier / répertoire
[Note] Lecture de fichier ~ Python ~
Bases de Python ② pour déclaration
Traitement de fichiers en Python
Téléchargement parallèle avec Python
Exécuter automatiquement le fichier python
Lecture du fichier pyc (Python 3.5.2)
À propos de Python, pour ~ (plage)
Manuel python pour les débutants
Refactoring des outils utilisables avec Python
Manipulation de fichiers avec Python
ScreenShot avec Selenium (édition Python)
Toolchain pour Python pour Android
Grattage avec du sélénium [Python]
Lire le fichier csv Python
lecture de fichier externe python
OpenCV pour les débutants en Python
Installez Python (pour Windows)
[Python] pour une erreur d'instruction
Maintenance de l'environnement Python pour les projets
python sélénium chromedriver beautifulsoup
Bibliothèque standard de journalisation Python pour la sortie de fichier par niveau de journal
[Selenium] Imprimer sans en-tête ni pied de page (forcé) [Pilote Python / Chrome]
Google recherche la chaîne sur la dernière ligne du fichier en Python
Renommer le fichier Gerber tracé avec Kicad pour elecrow python (approprié)
Convertir un fichier Excel en texte en Python à des fins de comparaison