[PYTHON] Construisez une machine d'acquisition de capture avec Selenium

Pour créer un serveur d'acquisition de capture dans CentOS6 J'ai essayé d'utiliser Selenium!

Tout d'abord, configurez l'affichage virtuel pour que Firefox puisse s'exécuter sur la CUI. L'affichage virtuel utilise Xvfb

# yum -y install Xvfb firefox

Installez également Firefox

Ensuite, définissez l'UUID

# dbus-uuidgen > /var/lib/dbus/machine-id

Se préparer à travailler avec Selenium de Python

# cd /usr/local/src
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
# python get-pip.py
# pip install selenium

Autoriser les paramètres Xvfb et le démarrage automatique Créer un script rc

# vi /etc/init.d/xvfb
#!/bin/bash
#
# chkconfig: - 91 35
# description: Xvfb
export DISPLAY="localhost:1.0"
# Source function library.
. /etc/init.d/functions

prog=$"Xvfb"

# Xvfb program
XVFB=/usr/bin/Xvfb
STATUS=":1 -screen 0 1024x768x8"
pidf=/var/run/xvfb.pid

start() {
    if [ -e $pidf ];
    then
        action $"Starting $prog: " /bin/false
        echo "$prog already started"
    else
        action $"Starting $prog: " /bin/true
        $XVFB $STATUS > /dev/null 2>&1 &
        echo $! > $pidf
    fi
}

stop() {
    if [ -e $pidf ];
    then
        action $"Stopping $prog: " /bin/true
        pid=`cat $pidf`
        test ! -z $pid && kill $pid && rm -f $pidf
    else
        action $"Stopping $prog: " /bin/false
        echo "$prog not running"
    fi
}

status() {
    if [ -e $pidf ];
    then
        echo "$prog (pid `cat $pidf`)Est en cours d'exécution..."
    else
        echo "$prog not running"
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 1
        start
        ;;
    status)
        status
        ;;
    *)
        echo $"Usave: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

Enregistrer le script rc créé en tant que service

# chmod 755 /etc/init.d/xvfb
# chkconfig --add xvfb
# chkconfig xvfb on
# /etc/init.d/xvfb start

Définir l'affichage virtuel sur la variable d'environnement

# vi /etc/profile

Ajoutez ce qui suit

export DISPLAY="localhost:1.0"

Enfin, créez un programme d'acquisition de capture

$ vi cap.py
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re, sys, os
from PIL import Image

try:
    URL    = sys.argv[1]
    FILE   = sys.argv[2]
    DEVICE = sys.argv[3]
except:
    print('Not argv')
    sys.exit(1)

class Cap(unittest.TestCase):
    def setUp(self):
        profile = webdriver.FirefoxProfile()
        profile.set_preference("browser.download.useDownloadDir", True)
        profile.set_preference("browser.download.folderList", 2)
        profile.set_preference("browser.download.dir", os.path.dirname(FILE))
        profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")
        profile.set_preference("browser.cache.disk.enable", False)
        profile.set_preference("browser.cache.memory.enable", False)
        profile.set_preference("browser.cache.offline.enable", False)
        profile.set_preference("network.http.use-cache", False)

        useragent = ""
        if DEVICE == "sp":
            useragent = "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4"
        else:
            useragent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"

        profile.set_preference("general.useragent.override", useragent)

        self.driver = webdriver.Firefox(firefox_profile=profile)
        self.driver.implicitly_wait(100000)
        self.base_url = URL
        self.verificationErrors = []
        self.accept_next_alert = True

        if DEVICE == "sp":
            self.driver.set_window_size(320, 480)

    def test_cap(self):
        driver = self.driver

        driver.get(URL)
        time.sleep(3)
        driver.save_screenshot(FILE)

        # slice image
        # org_im = Image.open(FILE)
        # size   = org_im.size
        # new_im = None
        # height = 800 if size[1] > 800 else size[1]
        # new_im = org_im.crop((0, 0, size[0], height))
        # if DEVICE == "sp":
        #     new_im = org_im.crop((0, 0, size[0], height))
        # else:
        #     new_im = org_im.crop((0, 0, size[0], height))

        # new_im.save(FILE, "PNG")
        # os.chmod(FILE, 0666)
      
    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e:
            return False

        return True

    def is_alert_present(self):
        try:
            self.driver.switch_to_alert()
        except NoAlertPresentException, e:
            return False

        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()

            return alert_text
        finally:
            self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main(argv=sys.argv[:1])

Comment utiliser

$ python cap.py [URL] [Enregistrer le chemin de destination] [dispositif(pc or sp)]

Si vous souhaitez traiter la capture capturée coupe l'image de Gonyo Gonyo ci-dessous

# yum install fonts-ja* ttfonts-ja*

Collecter un grand nombre d'images de chiens ♪ w

Recommended Posts

Construisez une machine d'acquisition de capture avec Selenium
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créer un environnement d'apprentissage automatique
Créez un environnement d'apprentissage automatique scikit-learn avec VirtualBox et Ubuntu
Créer un fichier deb avec Docker
Créer une application Web avec Django
Créez facilement un environnement de développement avec Laragon
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Une histoire sur l'apprentissage automatique avec Kyasuket
Créez un environnement d'API rapide avec docker-compose
Créez un environnement virtuel pour python avec pyenv
Créez un environnement Python moderne avec Neovim
Construire une bibliothèque statique (.a) avec waf
Construction d'environnement AI / Machine Learning avec Python
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
[EC2] Comment faire une capture d'écran de votre smartphone avec du sélénium
Créer un serveur local avec une commande sur une seule ligne [Mac]
Grattage au sélénium
Créer un environnement de développement de langage C avec un conteneur
Grattage au sélénium ~ 2 ~
Créez un environnement python avec ansible sur centos6
[Python] Créer un environnement de développement Django avec Docker
Créez un système de synthèse bon marché avec des composants AWS
Créez un environnement Django avec Vagrant en 5 minutes
Grattage avec du sélénium
Commençant par Selenium
[Memo] Créez un environnement virtuel avec Pyenv + anaconda
Créer un environnement de développement Django à l'aide de Doker Toolbox
Construire un environnement Python avec OSX Elcapitan
Créer un environnement d'exécution python avec VS Code
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créer un environnement Python d'apprentissage automatique sur Mac OS
Sentons-nous comme un chercheur en matériaux avec l'apprentissage automatique
Impossible de manipuler l'iframe dans la page avec Selenium
J'ai essayé un RPA simple pour me connecter avec du sélénium
Créez un environnement de développement avec Poetry Django Docker Pycharm
Construire un environnement Django pour Win10 (avec espace virtuel)
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Windows10 (x64) Créer nativement un environnement d'apprentissage automatique
Construire un environnement de calcul numérique avec pyenv et miniconda3
Grattage réussi avec Selenium
Format A4 avec python-pptx
ScreenShot avec Selenium (édition Python)
Construisez python3.x avec pyenv
Grattage avec du sélénium [Python]
Décorer avec un décorateur
Créer un environnement d'étude d'apprentissage automatique Python avec macOS Sierra
Créer un environnement d'apprentissage automatique sur Mac (pyenv, deeplearning, opencv)
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
Introduction à l'apprentissage automatique avec scikit-learn - De l'acquisition de données à l'optimisation des paramètres
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Créez un environnement de développement Go avec les conteneurs distants de VS Code
(Maintenant) Construisez un environnement GPU Deep Learning avec GeForce GTX 960
Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Créez une application de tableau d'affichage à partir de zéro avec Django. (Partie 2)
Créez un environnement de développement confortable avec VSCode x Remote Development x Pipenv