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.
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)
Versuchen Sie zunächst, den Browser zu starten. Dieses Mal zielen wir auf Firefox.
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)
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
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
Lassen Sie uns nun den gestarteten Browser bedienen.
url = 'http://qiita.com/'
browser.get(url)
tag = browser.find_element_by_id('elemet-id')
tags = browser.find_elements_by_class_name('class-name')
Im Folgenden wird eine Liste der Eingabe-Tags angezeigt.
tags = browser.find_elements_by_css_selector('input')
tag.click()
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()
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')
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
browser.maximize_window()
if tag.is_displayed():
print(u'Wird angezeigt')
else:
print(u'Nicht angezeigt')
Unten wird der Bildschirm nach unten gescrollt.
browser.execute_script('window.scrollTo(0, 1000)')
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 ist eine Bibliothek, mit der Sie den Start und die Steuerung auf standardmäßige Weise beschreiben können.
Da Selen verwendet wird, muss Selen installiert werden.
$ pip install pywad
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.
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')
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)
#! /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()
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