0
0

More than 3 years have passed since last update.

Windows 10 + Python3 + selenium + chromedriver + headless chrome で要素を操作してみる(その1 修正版)

Last updated at Posted at 2020-06-02

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順)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0