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.
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)
Tout d'abord, essayez de démarrer le navigateur. Cette fois, nous ciblons 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)
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
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
Maintenant, exploitons le navigateur lancé.
url = 'http://qiita.com/'
browser.get(url)
tag = browser.find_element_by_id('elemet-id')
tags = browser.find_elements_by_class_name('class-name')
Ce qui suit obtient une liste de balises d'entrée.
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) #Supprimer un caractère
textbox.send_keys(Keys.BACK_SPACE * 10) #Supprimer 10 caractères
browser.maximize_window()
if tag.is_displayed():
print(u'Est affiché')
else:
print(u'Pas affichée')
Ci-dessous, l'écran défile vers le bas.
browser.execute_script('window.scrollTo(0, 1000)')
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 est une bibliothèque qui vous permet de décrire le démarrage et le contrôle de manière standard.
Puisque Selenium est utilisé, Selenium doit être installé.
$ pip install pywad
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.
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')
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)
#! /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()
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ё