Bedienen Sie den Browser mit den Python-Bindungen des Selenium Web Driver

Dieser Artikel ist der Artikel zum 11. Tag von Selenium / Appium Adventskalender 2014. Der gestrige Artikel war @ totutitetas Roboterantriebe im Web: Robot Framework & Selenium2Library.

Heute habe ich zusammengefasst, wie man mit Firefox unter Verwendung der Python-Bindungsbibliothek von Selenium Selenium arbeitet. Ich habe auch eine Bibliothek für den Betrieb mit Selen erstellt.

Versuchen Sie, mit Firefox mit der Python-Bindungsbibliothek [Selen] von Selenium (https://pypi.python.org/pypi/selenium) zu arbeiten.

Zum Zeitpunkt des Schreibens dieses Artikels ist die neueste Version von Selen 2.44.0. (Wahrscheinlich funktioniert der folgende Code nicht mit Versionen unter 2.35)

Anlaufen

Versuchen Sie zunächst, den Browser zu starten. Dieses Mal zielen wir auf Firefox.

Profil erstellen

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)

Proxy-Einstellungen erstellen

Das Proxy-Objekt wird mit den Attributen ftp_proxy, ssl_proxy und http_proxy festgelegt. Keiner scheint gut zu sein, wenn er nicht benutzt wird.

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

Starten Sie Firefox

from selenium.webdriver import Firefox
browser = Firefox(firefox_profile=profile, proxy=proxy)
browser.implicitly_wait = 10  #Stellen Sie die Wartezeit ein, bis die Seite geladen wird
browser.delete_allcookies()  #Löschen Sie alle Cookies

Operation

Lassen Sie uns nun den gestarteten Browser bedienen.

Versuchen Sie, die Seite durch Angabe der URL zu wechseln

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

Holen Sie sich das Element, indem Sie das ID-Attribut angeben

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

Rufen Sie eine Liste der Elemente ab, indem Sie das Klassenattribut angeben

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

Rufen Sie eine Liste der Elemente ab, indem Sie einen CSS-Selektor angeben

Im Folgenden wird eine Liste der Eingabe-Tags angezeigt.

tags = browser.find_elements_by_css_selector('input')

Klicken Sie auf ein Element

tag.click()

Senden Sie mit der Schaltfläche "Senden" im Formular

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()

Geben Sie Zeichen in das Textfeld ein

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')

Sie können die Zeichen löschen, indem Sie den BackSpace-Schlüsselcode senden

from selenium.webdriver.common.keys import Keys
textbox.send_keys(Keys.BACK_SPACE)  #Löschen Sie ein Zeichen
textbox.send_keys(Keys.BACK_SPACE * 10)  #Löschen Sie 10 Zeichen

Fenster maximieren

browser.maximize_window()

Überprüfen Sie, ob das Element sichtbar ist

if tag.is_displayed():
    print(u'Wird angezeigt')
else:
    print(u'Nicht angezeigt')

Führen Sie Javascript aus

Unten wird der Bildschirm nach unten gescrollt.

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

Ich habe eine Bibliothek für den Betrieb mit Selen erstellt

Sie können verschiedene Operationen ausführen, aber um die oben genannten tatsächlich zu verwenden, möchten Sie häufig verschiedene Übergänge vornehmen. Es kann Fälle geben, in denen Sie behalten möchten, was Sie gerade auf der Seite tun, auf der Sie sich gerade befinden, den Status der Seite oder den Status der Seite, auf der Sie sich zuvor befanden. (Ich bin tatsächlich auf eine solche Situation gestoßen)

Also habe ich eine Bibliothek erstellt, die wie ein Framework verwendet werden kann.

pywad

pywad ist eine Bibliothek, mit der Sie den Start und die Steuerung auf standardmäßige Weise beschreiben können.

Installation

Da Selen verwendet wird, muss Selen installiert werden.

$ pip install pywad

Wie benutzt man

pywad hat eine Runner-Klasse und eine Part-Klasse. Die Part-Klasse ist eine Klasse zur Beschreibung der Steuerung kleiner Steuereinheiten, z. B. einer Seite, und arbeitet als Teil der Runner-Klasse.

Teileklasse

Die Part-Klasse verfügt über eine is_target () -Methode und eine run () -Methode. is_target () ist eine Methode, die bestimmt, ob sie gesteuert wird oder nicht, und die run () -Methode wird ausgeführt, wenn diese Methode True zurückgibt. Wenn es tatsächlich verwendet wird, wird es verwendet, indem is_target () und run () überschrieben werden. Beide Methoden erhalten ein Browserobjekt und ein Objekt, das den Status enthält. Verwenden Sie sie daher, um den Prozess zu definieren.

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')

Läuferklasse

Die Runner-Klasse verwaltet Daten, die zwischen Browsern und Teilen aufgeteilt werden müssen. Durch Registrieren der Teileklasse in der Runner-Klasse wird das Zielteil gesucht und ausgeführt.

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

Sie können es so schreiben.

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

Bitte benutzen Sie es, wenn Sie möchten

Morgen?

Wer wird morgen sein? Niemand hat .oO registriert (ich möchte, dass jemand schreibt)

Morgen ist ***. Das kann ich nicht sagen, deshalb werde ich einen Link zum Adventskalender veröffentlichen. http://qiita.com/advent-calendar/2014/selenium

Dann ヾ (・ д ・) Byё ヾ (・ д ・) Byё

Recommended Posts

Bedienen Sie den Browser mit den Python-Bindungen des Selenium Web Driver
[Python] Betreiben Sie den Browser automatisch mit Selenium
Web Scraping mit Selenium (Python)
Starten Sie den Router mit Python, Selenium, PhantomJS neu
Ich habe versucht, Web-Scraping mit Python und Selen
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Bearbeiten Sie Redmine mit Python Redmine
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Versuchen Sie es mit dem Python-Webframework Django (2). Schauen Sie sich settings.py an
Starten Sie mit Python zu Selen
Verwandeln Sie Ihr Android-Smartphone mithilfe von Python in einen Webserver.
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Betreiben Sie Firefox mit Selen aus Python und speichern Sie die Bildschirmaufnahme
Visualisieren Sie Ihre Taschengelddateien mit Dash, dem Python-Webframework
Python im Browser: Brythons Empfehlung
Klicken Sie auf die Web-API in Python
Extrahieren Sie die Targz-Datei mit Python
Versuchen Sie es mit dem Python Cmd-Modul
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Das LXC Web Panel, das LXC mit einem Browser bedienen kann, war wunderbar
Wenn Selenium sagt, dass die Chrome-Treiberversion anders ist (Python)
[EV3 x Python] Streame Kamerabilder mit mjpg-streamer auf deinen PC.
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
[Python] So stellen Sie mit Selenium die (Client-) Fenstergröße im Browser ein
Versuchen Sie es mit dem Webanwendungsframework Flask
Versuchen Sie, die Kraken-API mit Python zu verwenden
Hinter dem Flyer: Docker mit Python verwenden
Portweiterleitung eines Webservers mithilfe von iptables
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Tweet mit der Twitter-API in Python
Arbeiten mit OpenStack mit dem Python SDK
Laden Sie mit Python Dateien im Web herunter
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Betreiben Sie Webseiten automatisch mit dem Selenium-Webdriver
Üben des Web-Scrapings mit Python und Selen
python setup.py testet den Code mit Multiprocess
Umgebungskonstruktionsverfahren zum Betrieb von Chrome ohne Installation von Python unter Windows (unter Verwendung von Selen)
Probieren Sie einen datengesteuerten Test mit Selenium Python Bindings und py.test aus