Windows 10 + Python3 + selenium + chromedriver + headless chrome で要素を操作してみる(その1 修正版)
目的
日本Seleniumユーザーコミュニティが公開しているテストサイトの要素を操作してみる
以前動かしていたコードに対して、headless chrome を使用するように修正&動作確認
サンプルコード
textbox:値の確認と、テキスト入力後の値を確認する
radio button:値の確認と、他方をクリックした後の値を確認する
checkbox:値の確認と、両方をクリックした後の値を確認する
※注意事項:radio button、checkboxの値の取得
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
# ブラウザーを起動
options = Options()
options.binary_location = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('http://example.selenium.jp/reserveApp/')
try:
# 0.5秒間隔で検索の終了をチェックする(最大10秒)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'goto_next'))
)
# 宿泊日
# 内容の確認
elm = driver.find_element_by_name('reserve_y')
print('reserve_y:' + elm.get_attribute('value'))
elm = driver.find_element_by_name('reserve_m')
print('reserve_m:' + elm.get_attribute('value'))
elm = driver.find_element_by_name('reserve_d')
print('reserve_d:' + elm.get_attribute('value'))
print('input:宿泊日')
# textbox に入力する clear() -> send_keys()
elm = driver.find_element_by_name('reserve_y')
elm.clear()
elm.send_keys('2020')
print('reserve_y:' + elm.get_attribute('value'))
elm = driver.find_element_by_name('reserve_m')
elm.clear()
elm.send_keys('3')
print('reserve_m:' + elm.get_attribute('value'))
elm = driver.find_element_by_name('reserve_d')
elm.clear()
elm.send_keys('14')
print('reserve_d:' + elm.get_attribute('value'))
# 人数
# 内容の確認
elm = driver.find_element_by_name('reserve_t')
print('reserve_t:' + elm.get_attribute('value'))
print('input:人数')
# 人数の変更
elm = driver.find_element_by_name('reserve_t')
elm.clear()
elm.send_keys('2')
print('reserve_t:' + elm.get_attribute('value'))
# 朝食バイキング
# 内容の確認
elm = driver.find_element_by_id('breakfast_on')
print('breakfast_on :' + ('on' if elm.get_attribute('checked') else 'off'))
elm = driver.find_element_by_id('breakfast_off')
print('breakfast_off:' + ('on' if elm.get_attribute('checked') else 'off'))
print('change:朝食バイキング')
# breakfast_off をクリック
driver.find_element_by_id('breakfast_off').click()
print('clicked')
elm = driver.find_element_by_id('breakfast_on')
print('breakfast_on :' + ('on' if elm.get_attribute('checked') else 'off'))
elm = driver.find_element_by_id('breakfast_off')
print('breakfast_off:' + ('on' if elm.get_attribute('checked') else 'off'))
# プラン
# 内容の確認
elm = driver.find_element_by_name('plan_a')
print('plan_a:' + ('on' if elm.is_selected() else 'off'))
elm = driver.find_element_by_name('plan_b')
print('plan_b:' + ('on' if elm.is_selected() else 'off'))
print('checkbox:プラン')
# checkbox をクリックする
driver.find_element_by_name('plan_a').click()
driver.find_element_by_name('plan_b').click()
print('clicked')
elm = driver.find_element_by_name('plan_a')
print('plan_a:' + ('on' if elm.is_selected() else 'off'))
elm = driver.find_element_by_name('plan_b')
print('plan_b:' + ('on' if elm.is_selected() else 'off'))
# お名前
# 内容の確認
elm = driver.find_element_by_name('gname')
print('gname:' + elm.get_attribute('value'))
print('input:名前の入力')
# 名前の入力
elm = driver.find_element_by_name('gname')
elm.clear()
elm.send_keys('tabizou')
print('gname:' + elm.get_attribute('value'))
# --headless をコメントアウトした場合の表示確認用のwait
# time.sleep(5)
finally:
print('done')
driver.quit()
参考にしたのは以下のサイト
Selenium with Python
Windows 10 Pro x64 + Python3 で selenium + chromedriver で要素を操作してみる(その1)
5. 待機
7. WebDriver API
Selenium Python(ABC順)