[PYTHON] Betreiben Sie Paints Chainer mit Selen, um Bilder im Verzeichnis automatisch einzufärben

Es ist eine kleine Anwendung des Browser-Automatisierungssystems.

</ i> Übersicht

[PaintsChainer -Line Drawing Automatic Colouring Service-] Arbeiten Sie mit Selen, um die Bilder im angegebenen Verzeichnis ohne Hinweise einzufärben.

</ i>: gear: Verifizierungsumgebung

  • Linux (Windows-Umgebung kommt oft heraus, wenn ich es überprüfe)
  • Python 2.7.5
  • selenium (2.53.6)
  • Chrome 59.0.3071.115
  • ChromeDriver 2.30.477691

Zuerst baute ich mit Phantomjs, aber einen Tag nachdem ich angefangen hatte zu bauen

Von 10:30 Uhr am 27. Juni bis 16:00 Uhr am 28. Juni, japanische Zeit, gab es ein Problem, dass Paints Chainer in einigen Browsern nicht automatisch eingefärbt werden konnte. Wir möchten uns bei den Nutzern bedanken, die diesbezüglich Anfragen gestellt haben. Derzeit haben wir restauriert.

Ich habe zu Chrome gewechselt, weil eine Änderung einen anderen JS-Fehler als Chrome verursacht hat. Ich dachte, ich müsste umsteigen, also fürchte ich, ich bin unglücklich. Es war auch einfach, auf die stabile Version von Chrome umzusteigen, die 59 wurde.

</ i> Code


# coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from pyquery import PyQuery as pq
import sys
import glob
import os
import time
import urllib

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

from selenium.webdriver.chrome.options import Options


# https://stackoverflow.com/questions/12093940/reading-files-in-a-particular-order-in-python
import re
numbers = re.compile(r'(\d+)')
def numericalSort(value):
    parts = numbers.split(value)
    parts[1::2] = map(int, parts[1::2])
    return parts


# https://stackoverflow.com/questions/43813170/using-selenium-webdriver-to-wait-the-attribute-of-element-to-change-value
class wait_for_the_attribute_value(object):
    def __init__(self, locator, attribute, value):
        self.locator = locator
        self.attribute = attribute
        self.value = value

    def __call__(self, driver):
        try:
            element_attribute = EC._find_element(driver, self.locator).get_attribute(self.attribute)
            return (element_attribute != self.value) 
        except StaleElementReferenceException:
            return False

if __name__ == '__main__':
    args = sys.argv
    if (len(args) < 2):
        quit('required directory path')

    original_dir = os.path.abspath(args[1])
    color_dir = original_dir + '_color'
    try:
        os.mkdir(color_dir)
    except OSError:
        pass

    try:
        # driver = webdriver.PhantomJS()
        options = Options()
        # options.binary_location = '' /usr/bin/Wird nicht benötigt, da ich die Binärdatei nach verschoben habe
        options.add_argument('--headless')
        driver = webdriver.Chrome(chrome_options=options)
        driver.get('https://paintschainer.preferred.tech/index_ja.html')

        #Ich denke nicht, dass es notwendig ist, aber es stört den Screenshot zur Überprüfung des Vorgangs, also schließen Sie den Vertragsbildschirm
        close = driver.find_element_by_css_selector('.close')
        close.click()

        for path in sorted(glob.glob(original_dir + '/*'), key=numericalSort):
            dummy, ext = os.path.splitext(path)
            #Transparente PNG-Maßnahmen, die TODO nicht unterstützen Groß- und Kleinschreibung?
            if (ext != '.jpg' and ext !=  '.jpeg' and ext !=  '.png'):
                continue

            driver.execute_script("document.getElementById('load_line_file').style.display = '';")
            elm = driver.find_element_by_id("load_line_file")
            elm.send_keys(os.path.abspath( path ))
            src = driver.find_element_by_id("output").get_attribute('src')
            WebDriverWait(driver, 60 * 5).until(wait_for_the_attribute_value((By.ID, 'output'), 'src', src))

            output = driver.find_element_by_id("output").get_attribute('src')
            urllib.urlretrieve(output, color_dir + '/' + os.path.basename(path))

            time.sleep(10)

    except TimeoutException as e:
        print(e)
        driver.save_screenshot('./timeout.png')
    except Exception as e:
        print(e)
        driver.save_screenshot('./exception.png')
    finally:
        driver.quit()

Ich kann immer noch nicht sauber schreiben ...

</ i> Impressionen

Mit PaintsChainer (und der abgebildeten Datei) können Sie farbige Cartoons lesen! Das Ergebnis des Durchblicks. Es war nicht sehr gut. Die Farbe ist vage, aber die Schrift ist unscharf.

Eigentlich wollte ich ein Farbbeispiel für "Gib mir einen Blackjack" veröffentlichen, aber ich hörte auf, weil ich dachte, es sei mühsam, die E-Mail nach der Veröffentlichung kurz zuvor zu kontaktieren. Wenn Sie sich weigern, handelt es sich um eine wirklich lockere und gute Lizenz, da Sie erst nachträglich Kontakt aufnehmen und den Titel und den Namen des Autors anzeigen müssen. Die Manga-Daten "Gib mir einen Blackjack" stehen allen kostenlos zur sekundären Verwendung zur Verfügung. ]

Ich denke, dass "Pseudo-Vierfarben-Druck" -Werkzeuge wie Cartoon-Betrachter ein einheitlicheres Gefühl haben. Wenn Sie unhöflich sind, ist es eher wie ein Shintosha-System als das fertige Manuskript? Ein Cartoon, der näher an einer Strichzeichnung liegt, ist möglicherweise besser geeignet.

Das Lernziel ist in erster Linie anders. Die Technik der Farbseite des Cartoons scheint sich jedoch von der des Monochroms zu unterscheiden, und es scheint schwierig zu sein, Proben zu sammeln. Und wenn Sie das können, würden Sie sich nicht die Mühe machen, woanders aufzustehen und Freeride zu fahren.

Ich bin nicht sicher, wofür dieser Code verwendet wird.

</ i> Referenz

  • [Einfrieren mit send_keys der Dateiauswahl beim Ausführen von Selenium WebDriver mit Python [PhantomJS] --Qiita]
  • [Ich habe versucht, Headless Chrome von Selenium - Qiita zu verwenden]
  • [Chrome unter CentOS 7-Qiita installieren]
  • [Getting started - ChromeDriver - WebDriver for Chrome]
  • [PaintsChainer - Automatischer Service zum Zeichnen von Strichzeichnungen - Nutzungsbedingungen]

Verbote Menschen sollten einen Standard-Webbrowser verwenden, um in einer ähnlichen Zeit mehr Anforderungsnachrichten an unseren verwalteten Server zu senden, als in einer bestimmten Zeit vernünftigerweise generiert werden können. Handlungen, die den Server oder das Netzwerksystem dieses Dienstes in irgendeiner Weise stören.

  • [Okazaki City Central Library Fall-Wikipedia]

[Fall-Wikipedia der Zentralbibliothek der Stadt Okazaki]: https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8 % AD% E5% A4% AE% E5% 9B% B3% E6% 9B% B8% E9% A4% A8% E4% BA% 8B% E4% BB% B6 [Getting started - ChromeDriver - WebDriver for Chrome]:https://sites.google.com/a/chromium.org/chromedriver/getting-started [Chrome unter CentOS 7-Qiita installieren]: http://qiita.com/shadowhat/items/af6b973df43d75abfe8e [Ich habe versucht, Headless Chrome von Selenium - Qiita zu verwenden]: http://qiita.com/orangain/items/db4594113c04e8801aad

[Einfrieren mit send_keys der Dateiauswahl beim Ausführen von Selenium WebDriver mit Python [PhantomJS] --Qiita]: http://qiita.com/khsk/items/d017191905db99a94ffe

Recommended Posts