💬
[Python]Seleniumの使い方一覧
前提
#webdriverをimport
from selenium import webdriver
接続と終了
#Firefoxの場合
#接続
driver = webdriver.Firefox()
#終了
driver.quit()
#Chromeの場合
#接続
driver = webdriver.Chrome()
#終了
driver.quit()
アクセス
基本的に大抵の操作はここから始まるのではないでしょうか。
url = 'https://www.google.co.jp/'
driver.get(url)
要素の取得
基本的に一番最初に見つかった要素
#タグ名で検索
element = driver.find_element_by_tag_name('tag_name')
#タグ名で検索(応用): 子要素を指定できたりする
element = driver.find_element_by_tag_name('div>a)
#クラス名で検索
element = driver.find_element_by_class_name('class_name')
#idで検索
element = driver.find_element_by_id('id')
#name属性で検索
element = driver.find_element_by_name('name_attr')
#xpathで検索
element = driver.find_element_by_xpath('xpath')
#cssセレクタで検索
element = driver.find_element_by_css_selector('css_selector')
#リンクのテキストで検索
element = driver.find_element_by_link_text('sign in')
#リンクのテキストで検索(部分一致)
element = driver.find_element_by_partial_link_text('sign in')
要素の取得(リストで)
当てはまったものすべてをリストとして返す
#タグ名で検索
element = driver.find_elements_by_tag_name('tag_name')
#タグ名で検索(応用): 子要素を指定できたりする
element = driver.find_elements_by_tag_name('div>a)
#クラス名で検索
element = driver.find_elements_by_class_name('class_name')
#idで検索
element = driver.find_element_by_id('id')
#name属性で検索
element = driver.find_elements_by_name('name_attr')
#xpathで検索
element = driver.find_elements_by_xpath('xpath')
#cssセレクタで検索
element = driver.find_elements_by_css_selector('css_selector')
#リンクのテキストで検索
element = driver.find_elements_by_link_text('sign in')
#リンクのテキストで検索(部分一致)
element = driver.find_elements_by_partial_link_text('sign in')
Byを使って指定する
普通に使うならなかなか使わない気がするけれど、後の待機処理で使いたいので書いておく。
ポイントは、find_elementと指定を切り離したことにありそう。
#idで検索
element = driver.find_element_by_id('id')
↑と↓は同じこと
from selenium.webdriver.common.by import By
#idで検索
#element = driver.find_element(by=By.指定方法, value=指定する値)
element = driver.find_element(by=By.ID, value='id')
参考
よく使う処理
#ソースを取得する
driver.page_source
#ウィンドウのサイズを指定する
driver.set_window_size(100,300)
#全画面表示にする
driver.maximize_window()
#以降で使用するelementを生成
element = driver.find_element_by_tag_name('タグ名')
#現在のURLを取得する
element.current_url
#HTMLソースを取得
element.get_attribute('innerHTML')
#テキストを取得
element.text
#要素をクリックする <a>など
element.click()
#送信 <form>など
element.submit()
#属性値を取得 (例) <a>のhref属性など
element.get_attribute('href')
キー入力
#以降で使用するelementを生成
element = driver.find_element_by_tag_name('タグ名')
#入力する <input>など
element.send_keys('入力したい文')
#入力を消す <input>など
element.clear()
#送信 <form>など
element.submit()
特殊なキーの入力
単純な文字ではなく、ENTERや
from selenium.webdriver.common.keys import Keys
#以降で使用するelementを生成
element = driver.find_element_by_tag_name('タグ名')
#ENTERキーを入力
element.send_keys(Keys.ENTER)
#Shiftキーを押しながら。ということもできるみたい
element.send_keys(Keys.SHIFT,"text")
以下に一覧があります。
セレクトボックス
セレクトボックスを操作する方法です。
from selenium.webdriver.support.ui import Select
'''過程は省略'''
#要素を指定する
element = driver.find_element_by_tag_name('select')
#Selectクラスのインスタンスを生成することで様々な処理を扱える
select = Select(element)
#value属性の値を引数に指定することで、選択する
select.select_by_value('value')
#現在選択されているオプションを取得する
select.first_selected_option
#その他にもたくさんあります。
参考リンク
特殊な処理
ホバー
from selenium.webdriver.common.action_chains import ActionChains
#対象となる要素を取得
element = driver.find_element_by_id('id')
#ActionChains(ドライバ).move_to_element(対象の要素)
# move_to_element()は対象の要素にカーソルを移動させるための設定をする関数
hover = ActionChains(driver).move_to_element(element)
#設定したもの反映させる。(つまりここでカーソルが要素上に移動する)
hover.perform()
待機処理
暗黙の待機
.pyファイル内の書き方
#要素が見つかるまで55秒待つ。見つかり次第次へ
driver.implicitly_wait(5)
#要素が見つかるまで55秒待つ。見つかり次第次へ
driver.implicitly_wait(5)
明示的な待機
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.common.exceptions import TimeoutException
'''接続までは省略'''
try:
'''elementには見つけた要素を代入'''
#WebDriverWait(WebDriverインスタンス, 最大待機時間).unitl(何を見つけるまで?)
#EC.presence_of_element_located(By.指定方法, 指定する値)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
参考
待機処理で使えそうなメソッド一覧https://kurozumi.github.io/selenium-python/api.html
ウィンドウ切り替え
#JavaScriptで新規タブを開く
driver.execute_script('window.open()')
#switch_to()で一番最近生成されたタブに切り替える[-1]の指定は後ろから1番目という書き方
driver.switch_to.window(driver.window_handles[-1])
#現在のタブを閉じる。
driver.close()
#閉じたあとに操作しようとするとエラーが出るので、明示的に対象のタブ(ウィンドウ)を指定する必要があるみたい
driver.switch_to.window(driver.window_handles[0])
参考
コツ
開発者ツールを活用する
開発者ツールで該当するタグの部分を右クリックしてCopy→xpathなどを選択すれば、簡単にxpathやcssセレクタを取得できます。
気が向いたら別記事にまとめます。
Discussion