一行日記

Selenium

ブラウザ を自動操作して UI のテストができる。
便利だと思うのが、自動ログインとスクリーンショット機能。
また、chrome、firefox で headless モードが搭載されるようになり、
ブラウザを表示させずに画面キャプチャが可能だったりする。



インストール

  1. Python インストール
    https://www.python.org/downloads/release/python-364/
    ⇒ Windows x86 executable installer 
    英語で進むけど、環境変数に PATH を加えるオプションを忘れずに。
    忘れてたら、もう一度インストーラを実行して「modify」を選択すると選べる。


  2. Selenium インストール
    pip を使って selenium をインストールする。
    pip install selenium
    


  3. 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


  1. スクリプトを書き、実行してみる。
    以下の例だと、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()

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS