[[一行日記]]
*Selenium [#re816726]
ブラウザ を自動操作して UI のテストができる。~
便利だと思うのが、自動ログインとスクリーンショット機能。~
また、chrome、firefox で headless モードが搭載されるようになり、~
ブラウザを表示させずに画面キャプチャが可能だったりする。~
~
~
**インストール [#m7b6e535]
- せっかくだから Windows でやるぜ!~
+ Python インストール ~
https://www.python.org/downloads/release/python-364/ ~
⇒ Windows x86 executable installer ~
英語で進むけど、環境変数に PATH を加えるオプションを忘れずに。~
忘れてたら、もう一度インストーラを実行して「modify」を選択すると選べる。~
~
~
+ Selenium インストール ~
pip を使って selenium をインストールする。~
pip install selenium
~
~
+ Chrome/Firefox webdriver を入手する。 ~
これがないと Selenium が Chrome/Firefox を操作できない。~
https://chromedriver.storage.googleapis.com/index.html?path=2.34/ ~
⇒ Windows なら chromedriver_win32.zip ~
~
https://github.com/mozilla/geckodriver/releases ~
⇒ 64bit版 Firefox を使っている場合は、geckodriver-v0.19.1-win64.zip ~
~
zip を解凍し、ログインしているユーザの以下のフォルダに配置する。(パスが通ってればどこでもいい)~
C:\Users\<ユーザ名>\AppData\Local\Programs\Python\Python36-32\Scripts ~
~
~
+スクリプトを書き、実行してみる。~
以下の例だと、Aipo に自動ログインして、スクリーンショットを取得する流れ~
~
Chromeの場合:test.py ~
※ オレオレ証明書を読み込めないので注意~
~
~
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
options = Options()
# Chromeのパス(Stableチャネルで--headlessが使えるようになったら不要なはず)
options.binary_location = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
# ヘッドレスモードを有効にする(次の行をコメントアウトすると画面が表示される)。
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920,1080')
# ChromeのWebDriverオブジェクトを作成する。
driver = webdriver.Chrome(chrome_options=options)
# Googleのトップ画面を開く。
driver.get('https://aipo.sekiken.xyz/')
# タイトルに'Aipo'が含まれていることを確認する。
assert 'Aipo' in driver.title
# 入力して送信する。
username = driver.find_element_by_name('member_username')
username.send_keys('z20615**')
driver.save_screenshot('Aipo_Login1.png')
password = driver.find_element_by_id('password')
password.send_keys('********')
driver.save_screenshot('Aipo_Login2.png')
password.send_keys(Keys.RETURN)
time.sleep(2) # Chromeの場合はAjaxで遷移するので、とりあえず適当に2秒待つ。
# タイトルに'Python'が含まれていることを確認する。
#assert 'Python' in driver.title
# スクリーンショットを撮る。
driver.save_screenshot('Aipo_Login3.png')
time.sleep(2) # Chromeの場合はAjaxで遷移するので、とりあえず適当に2秒待つ。
driver.quit() # ブラウザーを終了する。
~
~
~
~
Firefox の場合:frame.py ~
※ headless モードが使えないのが難点 ~
~
# coding:utf-8
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.remote.webelement import WebElement
binary = FirefoxBinary('c:\Program Files\Mozilla Firefox\\firefox.exe')
binary.add_command_line_options('-headless')
browser = webdriver.Firefox(firefox_binary=binary)
browser.get('http://matomeantena.com/')
browser.set_window_size(1920,1080)
time.sleep(2)
browser.save_screenshot("frame1.png")
elm = browser.find_element_by_xpath('//*[@id="scrollbar"]')
elm.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
browser.save_screenshot("frame2.png")
elm.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
browser.save_screenshot("frame3.png")
elm.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
browser.save_screenshot("frame4.png")
elm.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
browser.save_screenshot("frame5.png")
elm.send_keys(Keys.PAGE_DOWN)
time.sleep(2)
browser.save_screenshot("frame6.png")
time.sleep(2)
browser.save_screenshot("frame7.png")
browser.quit()
** Let's Challenge [#z1adfdeb]
- 自動クリックスクリプト