[PYTHON] Utilisez Paints Chainer avec Selenium pour colorer automatiquement les images dans le répertoire

C'est une petite application du système d'automatisation du navigateur.

</ i> Présentation

PaintsChainer - Service de coloration automatique de dessin en ligne- Utilisez Selenium pour colorer les images dans le répertoire spécifié sans conseils.

</ i>: gear: environnement de vérification

  • Linux (l'environnement Windows sort souvent lorsque je le vérifie)
  • Python 2.7.5
  • selenium (2.53.6)
  • Chrome 59.0.3071.115
  • ChromeDriver 2.30.477691

Au début, je construisais avec des phantomjs, mais un jour après avoir commencé à construire

De 10h30 le 27 juin à 16h00 le 28 juin, heure du Japon, il y avait un problème en raison du fait que Paints Chainer ne pouvait pas être automatiquement coloré sur certains navigateurs. Nous remercions les utilisateurs qui ont posé des questions à ce sujet. Actuellement, nous avons restauré.

J'ai changé pour Chrome car il y avait un changement qui a provoqué une erreur JS autre que Chrome. Je pensais que je devais changer de train, alors j'ai peur d'être malheureux. De plus, il était facile de passer à la version stable de Chrome qui est devenue 59.

</ 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/Pas nécessaire car j'ai déplacé le binaire vers
        options.add_argument('--headless')
        driver = webdriver.Chrome(chrome_options=options)
        driver.get('https://paintschainer.preferred.tech/index_ja.html')

        #Je ne pense pas que ce soit nécessaire, mais cela interfère avec la capture d'écran pour vérifier l'opération, alors fermez l'écran du contrat
        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)
            #Mesures PNG transparentes qui ne prennent pas en charge TODO Majuscules et minuscules?
            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()

Je n'arrive toujours pas à écrire proprement ...

</ i> Impressions

Avec PaintsChainer (et le fichier image), vous pouvez lire des dessins animés en couleur! Le résultat de regarder à travers. Ce n'était pas très bon. La couleur est vague, mais la police est floue.

En fait, je pensais poster un exemple de coloriage de "Donnez-moi un blackjack", mais j'ai arrêté car je pensais que c'était gênant de contacter l'e-mail après la sortie juste avant. Si vous refusez, c'est une licence vraiment lâche et bonne car vous n'avez qu'à contacter après coup et afficher le titre et le nom de l'auteur. "Give me a blackjack" manga data est accessible à tous gratuitement pour un usage secondaire.

Je pense que les outils de "pseudo quadrichromie" comme les visionneuses de dessins animés ont un sentiment plus unifié. Plutôt que le manuscrit terminé, si vous êtes impoli, cela ressemble plus à un système Shintosha? Un dessin animé qui est plus proche d'un dessin au trait peut être plus adapté à l'utilisation.

L'objectif d'apprentissage est différent en premier lieu. Cependant, la page couleur du dessin animé semble avoir une technique différente du monochrome et il semble difficile de collecter des échantillons. Et si vous pouvez faire cela, vous ne vous donneriez pas la peine de vous lever et de freeride ailleurs.

Je ne sais pas à quoi sert ce code.

</ i> Référence

  • [Geler avec send_keys de la sélection de fichiers lors de l'exécution de Selenium WebDriver en Python [PhantomJS] --Qiita]
  • [J'ai essayé d'utiliser Headless Chrome de Selenium --Qiita]
  • [Installer Chrome sur CentOS 7-Qiita]
  • [Getting started - ChromeDriver - WebDriver for Chrome]
  • [PaintsChainer -Service de coloration de dessin au trait automatique-Conditions d'utilisation]

Interdictions Les humains doivent utiliser un navigateur Web standard pour envoyer plus de messages de demande à notre serveur géré dans un laps de temps similaire à celui qui peut raisonnablement en générer dans un laps de temps donné. Actes qui interfèrent de quelque manière que ce soit avec le serveur ou le système réseau de ce service.

  • [Affaire de la bibliothèque centrale de la ville d'Okazaki - Wikipedia]

[Affaire de la bibliothèque centrale d'Okazaki City - Wikipedia]: 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 [Installer Chrome sur CentOS 7-Qiita]: http://qiita.com/shadowhat/items/af6b973df43d75abfe8e [J'ai essayé d'utiliser Headless Chrome de Selenium --Qiita]: http://qiita.com/orangain/items/db4594113c04e8801aad

[Figer avec send_keys de la sélection de fichiers lors de l'exécution de Selenium WebDriver avec Python [PhantomJS] --Qiita]: http://qiita.com/khsk/items/d017191905db99a94ffe

Recommended Posts