LoginSignup
4
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-02-12

目的

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

4
5
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
4
5