Utilisez le navigateur à l'aide des liaisons Python du pilote Web Selenium

Cet article est l'article du 11ème jour du Calendrier de l'Avent Selenium / Appium 2014. L'article d'hier était [Les lecteurs de robots sur le Web: Robot Framework & Selenium2Library] de @ totutiteta (http://qiita.com/totutiteta/items/e7b99a76231dbfb0aaf1).

Aujourd'hui, j'ai résumé comment travailler avec Firefox en utilisant la bibliothèque de liaisons Python de Selenium selenium. J'ai également créé une bibliothèque pour fonctionner avec du sélénium.

Essayez de travailler avec Firefox avec la bibliothèque de liaisons Python de Selenium selenium

Au moment de la rédaction de cet article, la dernière version de sélénium est la 2.44.0. (Probablement le code suivant ne fonctionnera pas sur les versions inférieures à 2.35)

Commencez

Tout d'abord, essayez de démarrer le navigateur. Cette fois, nous ciblons Firefox.

Créer un profil

from selenium.webdriver import FirefoxProfile

default_profile = {
    'security.warn_entering_secure': False,
    'security.warn_entering_secure.show_once': True,
    'security.warn_entering_weak': False,
    'security.warn_entering_weak._show_once': True,
    'security.warn_leaving_secure': False,
    'security.warn_leaving_secure.show_once': True,
    'security.warn_leaving_weak': False,
    'security.warn_leaving_weak._show_once': True,
    'security.warn_submit_insecure': False,
    'security.warn_viewing_mixed': False,
    'security.warn_viewing_mixed.show_once': True,
    }
profile = FirefoxProfile()
for name, value in default_profile.items():
    profile.set_preference(name, value)

Création des paramètres de proxy

L'objet Proxy est défini avec les attributs ftp_proxy, ssl_proxy et http_proxy. Aucun ne semble être bon lorsqu'il n'est pas utilisé.

from selenium.webdriver import Proxy
proxy = Proxy()
proxy.ftp_proxy = proxy.ssl_proxy = proxy.http_proxy = None

Démarrez Firefox

from selenium.webdriver import Firefox
browser = Firefox(firefox_profile=profile, proxy=proxy)
browser.implicitly_wait = 10  #Définir le temps d'attente avant le chargement de la page
browser.delete_allcookies()  #Effacer tous les cookies

opération

Maintenant, exploitons le navigateur lancé.

Essayez de faire la transition de la page en spécifiant l'URL

url = 'http://qiita.com/'
browser.get(url)

Obtenir l'élément en spécifiant l'attribut id

tag = browser.find_element_by_id('elemet-id')

Obtenez une liste d'éléments en spécifiant l'attribut de classe

tags = browser.find_elements_by_class_name('class-name')

Obtenez une liste d'éléments en spécifiant un sélecteur CSS

Ce qui suit obtient une liste de balises d'entrée.

tags = browser.find_elements_by_css_selector('input')

Cliquez sur un élément

tag.click()

Soumettre avec le bouton d'envoi sur le formulaire

form = browser.find_elements_by_tag_name('form')[0]
for tag in form.find_elements_by_tag_name('input'):
    type_ = tag.get_attribute('type')
    if type_ == 'submit':
        entry.submit()

Entrez des caractères dans la zone de texte

textboxes = [tag for tag in browser.find_elements_by_tag_name('input') if tag.get_attribute('type') == 'text']
textbox = textboxes[0]

textbox.send_keys('CHARACTOR')

Vous pouvez effacer les caractères en envoyant le code de la touche BackSpace

from selenium.webdriver.common.keys import Keys
textbox.send_keys(Keys.BACK_SPACE)  #Supprimer un caractère
textbox.send_keys(Keys.BACK_SPACE * 10)  #Supprimer 10 caractères

Agrandir la fenêtre

browser.maximize_window()

Vérifiez si l'élément est visible

if tag.is_displayed():
    print(u'Est affiché')
else:
    print(u'Pas affichée')

Exécuter javascript

Ci-dessous, l'écran défile vers le bas.

browser.execute_script('window.scrollTo(0, 1000)')

J'ai créé une bibliothèque pour fonctionner avec du sélénium

Vous pouvez effectuer diverses opérations, mais pour utiliser réellement ce qui précède, vous souhaiterez souvent effectuer diverses transitions. Il peut arriver que vous souhaitiez conserver ce que vous faites à partir de la page sur laquelle vous vous trouvez actuellement, de l'état de la page ou de l'état de la page sur laquelle vous vous trouviez auparavant. (J'ai effectivement rencontré une telle situation)

J'ai donc créé une bibliothèque qui peut être utilisée comme un framework.

pywad

pywad est une bibliothèque qui vous permet de décrire le démarrage et le contrôle de manière standard.

Installation

Puisque Selenium est utilisé, Selenium doit être installé.

$ pip install pywad

Comment utiliser

pywad a une classe Runner et une classe Part. La classe Part est une classe pour décrire le contrôle de petites unités de contrôle telles qu'une page, et fonctionne comme une partie de la classe Runner.

Classe de pièce

La classe Part a une méthode is_target () et une méthode run (). is_target () est une méthode qui détermine si elle est contrôlée ou non, et la méthode run () est exécutée lorsque cette méthode renvoie True. Lors de son utilisation, il sera utilisé en remplaçant is_target () et run (). Les deux méthodes reçoivent un objet navigateur et un objet pour conserver le statut, utilisez-les pour définir le processus.

from pywad.part import Part
from pywad.decorator import url_match

class GoogleTop(Part):
    def _is_search_button(self, text):
        for word in self.search_words:
            if word in text:
                return True

    @url_match('www\.google\.')
    def is_target(self, browser, status):
        return True

    def run(self, browser, status):
        entries = browser.find_elements_by_css_selector('input')
        for entry in entries:
            if entry.get_attribute('type') == 'text':
                entry.send_keys('test\n\n')

Classe de coureur

La classe Runner gère les données qui doivent être réparties entre les navigateurs et les composants. En enregistrant la classe Part dans la classe Runner, la Part cible est recherchée et exécutée.

from pywad.runner import Runner
def main():
    url = 'http://www.google.com'
    runner = Runner()
    runner.append(GoogleTop())
    runner.run(url)

Vous pouvez l'écrire comme ça.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from pywad.runner import Runner
from pywad.part import Part
from pywad.decorator import url_match

class GoogleTop(Part):
    def _is_search_button(self, text):
        for word in self.search_words:
            if word in text:
                return True

    @url_match('www\.google\.')
    def is_target(self, browser, status):
        return True

    def run(self, browser, status):
        entries = browser.find_elements_by_css_selector('input')
        for entry in entries:
            if entry.get_attribute('type') == 'text':
                entry.send_keys('test\n\n')

def main():
    url = 'http://www.google.com'
    runner = Runner()
    runner.append(GoogleTop())
    runner.run(url)

if __name__ == '__main__':
    main()

Veuillez l'utiliser si vous le souhaitez

demain?

Qui sera demain? Personne n'a enregistré .oO (je veux que quelqu'un écrive)

Demain est ***. Je ne peux pas dire cela, alors je posterai un lien vers le calendrier de l'Avent. http://qiita.com/advent-calendar/2014/selenium

Puis ヾ (・ д ・) Byё ヾ (・ д ・) Byё

Recommended Posts

Utilisez le navigateur à l'aide des liaisons Python du pilote Web Selenium
[Python] Utiliser automatiquement le navigateur avec Selenium
Web scraping avec Selenium (Python)
Redémarrez le routeur en utilisant Python, Selenium, PhantomJS
J'ai essayé le web scraping en utilisant python et sélénium
Essayez d'utiliser le framework Web Python Tornado Partie 1
Essayez d'utiliser le framework Web Python Tornado Partie 2
Manipuler Redmine à l'aide de Python Redmine
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
Essayez d'utiliser le framework Web Python Django (2) - Regardez setting.py
Commencez à Selenium en utilisant python
Transformez votre téléphone intelligent Android en serveur Web à l'aide de python.
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
Utilisez Firefox avec Selenium depuis python et enregistrez la capture d'écran
Visualisez vos fichiers d'argent de poche avec Dash, le framework Web Python
Python dans le navigateur: la recommandation de Brython
Accédez à l'API Web en Python
Extraire le fichier targz en utilisant python
Essayez d'utiliser le module Python Cmd
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Le panneau Web LXC qui peut faire fonctionner LXC avec un navigateur était merveilleux
Quand Selenium dit que la version du pilote Chrome est différente (Python)
[EV3 x Python] Diffusez les images de la caméra sur votre PC en utilisant mjpg-streamer.
Essayez d'utiliser le framework web de Python Django (1) - De l'installation au démarrage du serveur
[Python] Comment définir la taille de la fenêtre (cliente) dans le navigateur avec Selenium
Essayez d'utiliser le framework d'application Web Flask
Essayez d'utiliser l'API Kraken avec Python
Derrière le flyer: utiliser Docker avec Python
Redirection de port d'un serveur Web à l'aide d'iptables
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Tweet à l'aide de l'API Twitter en Python
Travailler avec OpenStack à l'aide du SDK Python
Télécharger des fichiers sur le Web avec Python
Essayez d'utiliser Excel en utilisant Python (Xlwings)
Exploitez automatiquement les pages Web à l'aide du pilote Web Selenium
Pratiquer le web scraping avec Python et Selenium
python setup.py tester le code en utilisant le multiprocessus
Procédure de construction de l'environnement pour faire fonctionner Chrome sans installer Python sur Windows (en utilisant du sélénium)
Essayez la touche d'un test basé sur les données avec Selenium Python Bindings et py.test