#目的
selenium + chromedriver.exe の組み合わせを少し試してみる
キーワード入力 -> submit -> 表示結果の確認
※TODO:ページの遷移終了のトリガー
Chrome バージョン: 72.0.3626.96(Official Build)(64 ビット)
※headless chromeはこちら
##インストール
> pip install -U selenium
ChromeDriver - WebDriver for Chromeより ChromeDriver 2.46 をDLする
chromedriver_win32.zipを解凍して、適当なフォルダに配置する
※Windows版だからといってSeleniumbasicは必要ないんですね
##サンプルコード1
PS > python -V
Python 3.7.2
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()
##サンプルコード2(time.sleepをできるだけ使わない)
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秒間隔で検索の終了をチェックする(最大10秒)
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より抜粋)
## 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
##参考にしたのは以下のサイト
PythonでSeleniumを操作する
Python + Selenium で Chrome の自動操作を一通り
4. 要素を見つける
5. 待機
7. WebDriver API
Selenium Python(ABC順)