Windows 10 + Python3 + selenium + chromedriver + headless chrome で要素を操作してみる（その１ 修正版）

Windows 10 + Python3 + selenium + chromedriver + headless chrome で要素を操作してみる（その１ 修正版）
#目的
[日本Seleniumユーザーコミュニティ](http://www.selenium.jp/test-site)が公開しているテストサイトの要素を操作してみる
以前動かしていたコードに対して、headless chrome を使用するように修正＆動作確認
#サンプルコード
textbox:値の確認と、テキスト入力後の値を確認する
radio button:値の確認と、他方をクリックした後の値を確認する
checkbox:値の確認と、両方をクリックした後の値を確認する
※注意事項：radio button、checkboxの値の取得

```python
# 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秒間隔で検索の終了をチェックする(最大１０秒)
    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](https://selenium-python.readthedocs.io/)
[Windows 10 Pro x64 + Python3 で selenium + chromedriver で要素を操作してみる（その１）](https://qiita.com/tabizou/items/5f781308da0009f48967)
[5. 待機](https://kurozumi.github.io/selenium-python/waits.html)
[7. WebDriver API](https://kurozumi.github.io/selenium-python/api.html)
[Selenium Python(ABC順)](https://www.seleniumqref.com/api/webdriver_abc_python.html)