Download-Datei für Python Selen Chrome überschreiben

Selen bequem. .. Es ist jedoch schwierig zu verwenden.

Um diese vier Punkte zu lösen, habe ich eine Chrome-Vererbungsklasse erstellt, damit sie problemlos verwendet werden kann.

Es gibt mehr Initialisierungsargumente als die Standardklasse, aber im Moment ist es einfach zu verwenden. Wenn ich Zeit habe, werde ich die Eröffnung jedes Prozesses zu einem späteren Zeitpunkt hinzufügen.


#!/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()

Nach der Initialisierung der Chrome-Klasse werde ich sofort driver.get (url) ausführen Geben Sie für das erste Argument die anfängliche Anzeige-URL ein. Häufig verwendete Argumente usw. werden in init gruppiert und als Standardwert festgelegt. Wenn Sie es verwenden, ist es ein Schuss wie folgt.


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() #Scrollen Sie zur letzten Zeile der Suchergebnisse
    time.sleep(3) #Es wird sofort geschlossen, warten Sie also 3 Sekunden

Send_keys ist auch problematisch, deshalb möchte ich etwas dagegen tun.

Recommended Posts

Download-Datei für Python Selen Chrome überschreiben
Selen + WebDriver (Chrome) + Python | Erstellen einer Umgebung zum Scraping
Legen Sie den Standard-Download-Ordner für den Chrome-Treiber von Selenium fest
Python Selenium Dynamic Download warten
So laden Sie Dateien von Selenium of Python in Chrome herunter
[Python + Selen] Tipps zum Scraping
Laden Sie die CSV-Datei mit Python herunter
Implementierter Dateidownload mit Python + Bottle
Hinweise zur Eingabe / Ausgabe von Python-Dateien
Laden Sie Python herunter
So installieren Sie Chrome Driver für Chrome automatisch mit Python + Selenium + Chrome
CSV-Datei mit Python lesen (CSV-Datei herunterladen und analysieren)
Laden Sie die Datei herunter, indem Sie das Download-Ziel mit Python & Selemiun & Chrome (Windows-Version) angeben.
2016-10-30 sonst für Python3> für:
Python [für mich]
Skript-Python-Datei
[Python / Selen] XPath
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
PDF mit Selenchromatriver (Chrome 57) + herunterladen (Sonstige Hinweise)
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Python-Dateiverarbeitung
[Python / Chrome] Grundeinstellungen und Operationen zum Scraping
Laden Sie Dateien herunter, während Sie den Fortschritt in Python 3.x anzeigen
Untersuchung der Schrittautomatisierung passender Apps (Python, Selenium, BeautifulSoup,)
Beachten Sie die häufig verwendeten Optionen in Python + Selen + Chrome
Python-Programm, das nach demselben Dateinamen sucht
Automatisieren Sie Chrome mit Python und Selen auf Ihrem Chromebook
Über Python für Schleife
Dateioperationen in Python
[Python] Datei- / Verzeichnisoperation
[Hinweis] Datei lesen ~ Python ~
Python-Grundlagen ② für Anweisung
Dateiverarbeitung in Python
Paralleler Download mit Python
Führen Sie die Python-Datei automatisch aus
Pyc-Datei lesen (Python 3.5.2)
Über Python für ~ (Bereich)
Python Lehrbuch für Anfänger
Refactoring-Tools, die mit Python verwendet werden können
Dateimanipulation mit Python
Screenshot mit Selen (Python Edition)
Toolchain für Python für Android
Schaben mit Selen [Python]
Lesen Sie die Python-CSV-Datei
Lesen einer externen Python-Datei
OpenCV für Python-Anfänger
Installieren Sie Python (für Windows)
[Python] für Anweisungsfehler
Wartung der Python-Umgebung für Projekte
Python Selen Chromedriver schöne Suppe
Python-Protokollierungsstandardbibliothek für die Dateiausgabe nach Protokollebene
[Selen] Drucken ohne Kopf- und Fußzeile (erzwungen) [Python / Chrome-Treiber]
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Benennen Sie die mit Kicad geplottete Gerber-Datei für elecrow python um (entsprechend)
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text