Windows 10 Pro x64 + Python3 で selenium + chromedriver を少し試してみる

#目的
selenium + chromedriver.exe の組み合わせを少し試してみる
キーワード入力 -> submit -> 表示結果の確認
※TODO:ページの遷移終了のトリガー
Chrome バージョン: 72.0.3626.96（Official Build）（64 ビット）
※[headless chromeはこちら](https://qiita.com/tabizou/items/71911a4d55e9c35b4546)
##インストール
\> pip install -U selenium
[ChromeDriver - WebDriver for Chrome](https://sites.google.com/a/chromium.org/chromedriver/downloads)より ChromeDriver 2.46 をDLする
chromedriver_win32.zipを解凍して、適当なフォルダに配置する
※Windows版だからといって[Seleniumbasic](https://florentbr.github.io/SeleniumBasic/)は必要ないんですね
##サンプルコード１
PS > python -V
Python 3.7.2

```python
import time
from selenium import webdriver

driver = webdriver.Chrome('C:\\Dev\\tool\\webdriver\\chromedriver.exe')
driver.get('http://www.google.com/xhtml')
time.sleep(5)
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5)
driver.quit()
```
##サンプルコード２(time.sleepをできるだけ使わない)

```python
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

driver = webdriver.Chrome('C:\\Dev\\tool\\webdriver\\chromedriver.exe')  
driver.get('http://www.google.com/xhtml')
try:
    # time.sleep(5)
    # search_box = driver.find_element_by_name('q')
    # 5秒のwait -> 0.5秒間隔で検索の終了をチェックする(最大１０秒)
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.NAME, "q"))
    )
    print(type(element))
    # <class 'selenium.webdriver.remote.webelement.WebElement'>
    element.send_keys('ChromeDriver')
    element.submit()
    # TODO:ページの遷移終了のトリガーの検討
    # 検索用のtextBoxの描画 はまずいよなぁ
    # 次へ が記述してあるところって By.ID="pnnext" かな？
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "pnnext"))
    )
    print(type(driver.current_url)) # <class 'str'>
    print(driver.current_url)       # 遷移後のURL

    time.sleep(5) # 表示確認用のwait
finally:
    driver.quit()
```
##今回のコードに関連する事(Selenium Python Bindingsより抜粋)
<pre>
## class selenium.webdriver.support.wait
 .WebDriverWait(driver
             , timeout
             , poll_frequency=0.5
             , ignored_exceptions=None)
until(method, message='')
 戻り値がFalseでない限り、ドライバで提供されたメソッドを引数として呼び出します。
until_not(method, message='')
 戻り値がFalseになるまで、ドライバで提供されたメソッドを引数として呼び出します。

## class selenium.webdriver.support.expected_conditions
  .presence_of_element_located(locator)
要素がページのDOM上に存在するかどうかを確認するための期待。
これは要素が可視であることを必ずしも意味しません
locator - 見つかった要素が見つかるとWebElementを返します

## selenium.webdriver.common.by.By
要素の検索
CLASS_NAME        = 'class name'
CSS_SELECTOR      = 'css selector'
ID                = 'id'
LINK_TEXT         = 'link text'
NAME              = 'name'
PARTIAL_LINK_TEXT = 'partial link text'
TAG_NAME          = 'tag name'
XPATH             = 'xpath'

## 4. 要素を見つける
要素を見つけるメソッド driver.
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text :  a要素のテキストの一部
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

## 複数の要素を見つけるメソッド(リストを返す) driver.
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

## プライベートメソッド ※By.ID が使用可能
find_element
find_elements
</pre>
##参考にしたのは以下のサイト
[PythonでSeleniumを操作する](https://kurozumi.github.io/selenium-python/index.html)
[Python + Selenium で Chrome の自動操作を一通り](https://qiita.com/memakura/items/20a02161fa7e18d8a693)
[4. 要素を見つける](https://kurozumi.github.io/selenium-python/locating-elements.html)
[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)