Seleniumコード断片集@Python

これまで使用したSeleniumのコードをさらす。
これで大体のブラウザ操作は書けるはず。

機能別

ブラウザの生成

Chrome

from selenium import webdriver
browser = webdriver.Chrome()

以降browserインスタンスの生成は省略する。

要素の取得

idを指定して要素を取得する

element = browser.find_element_by_id('targetId')

classを指定して要素を取得する

elements = browser.find_elements_by_class_name('target-class')

セレクタを指定して要素を取得する

element = browser.find_element_by_css_selector('#targetId')

タグを指定して要素を取得する

from selenium.webdriver.common.by import By

elements = browser.find_elemens(By.TAG_NAME, 'tr')

指定した画面に遷移する

url = 'http://test.co.jp'
browser.get(url)

別ウィンドウをアクティブにする

# ウィンドウが2つ表示されている場合、2つめのウィンドウをアクティブにする
browser.switch_to_window(browser.window_handles[1])

別ウィンドウが表示されるまで待機する

from selenium.webdriver.support.ui import WebDriverWait

# 今ウィンドウが1つでもう一つウィンドウが表示されるまで3秒待つ
WebDriverWait(browser, 3).until(lambda b: len(b.window_handles) > 1)

テキストボックスに値を設定する

textbox = browser.find_element_by_id('someTextbox')
textbox.send_keys('input text')

プルダウンから選択する

from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By

# 下記プルダウンからvalueが1のものを選択する
# <select name="sample"></select>
# <option value="0">0</option>
# <option value="1">1</option>
element = browser.find_elemens(By.TAG_NAME, 'select')[0]
select_element = Select(element)
select_element.select_by_value('1')

ボタンをクリックする

btn = browser.find_element_by_id('someBtn')
btn.click()

ダイアログ

ダイアログの「OK」をクリックする

from selenium.webdriver.common.alert import Alert

# ダイアログの「OK」をクリックする
Alert(browser).accept()

シーン別

ユーザIDとパスワードを入力してログインする

from selenium import webdriver

browser = webdriver.Chrome()

# ログイン画面に遷移
browser.get('http://test.co.jp/Home/Login')

# ユーザIDとパスワードを入力
userid_textbox = browser.find_element_by_id('userId')
userid_textbox.send_keys('testUser')
password_textbox = browser.find_element_by_id('password')
password_textbox.send_keys('1234QWER')

# ログインボタンをクリック
login_btn = browser.find_element_by_id('login')
login_btn.click()

ボタン名から適切なボタンを判別してクリックする

from selenium import webdriver

browser = webdriver.Chrome()

# クラス名からボタンを取得し、ボタン名から必要なボタンを絞る
btns = browser.find_elements_by_class_name('some-button')
for btn in btns:
    if btn.text == '欲しいボタン':
        btn.click()
        break

リクエスト送信後に表示される完了ダイアログの「OK」ボタンをクリックする

from selenium.webdriver.common.alert import Alert
from selenium import webdriver
import time

browser = webdriver.Chrome()

# ボタンをクリックし、リクエストを送る
submit_request_btn = browser.find_element_by_id('submitRequestBtn')
submit_request_btn.click()

# 念のため待機
time.sleep(1)
# 完了ダイアログの「OK」をクリックする
Alert(browser).accept()

ボタンクリック後新しいウィンドウが表示されたら新しいウィンドウに切り替える

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

# ボタンをクリックし、新しいウィンドウを表示する
create_new_window_btn = browser.find_element_by_id('createNewWindowBtn')
create_new_window_btn.click()

# 新しいウィンドウが表示されたら新しいウィンドウに切り替える
WebDriver(browser, 3).until(lambda b: len(b.window_handles) > 1)
browser.switch_to_window(browser.window_handles[1])