##はじめに
私自身は10月に入社してからPythonもコーディングもはじめました。
まだまだわからないことばかりですが、勉強の忘備録としてもPythonはじめたて、コーディングはじめたてのときに繰り返し調べたWebdriverのメソッドについて書いておこうと思います。
初期のほうのメモを見ながらの記載なので、間違いがあれば指摘してもらえるとすごく嬉しいです!
##Selenium WebDriverとは
Webブラウザをプログラムを使用して操作するためのツールです。
クロームを開く、検索窓にキーワードを入力する、検索ボタンをクリックする、といった一連の流れをプログラムで行うことができるます。
これによってスクレイピングやテストを行うことができます。
使用するのに下記が必要。
from selenium import webdriver
##WebElementとは
DOM要素のことを言います。
DOMとはxmlやhtmlの各要素(aタグやpタグなど)にアクセスする仕組みのことです。
つまりDOM要素とはWeb上に表示されている各要素を指しています。
##WebElementに対して使用できるメソッドまとめ
メソッド呼び出しは、要素の参照ができるかを確認します。
もしエラーとなった場合はStaleElementReferenceExceptionがスローされます。
###find_element
method | |
---|---|
find_element_by_id(id) | 子要素内の要素をIDで検索 |
find_element_by_class_name(class) | 子要素内の要素をClassで検索 |
find_element_by_css_selector(css_selector) | CSSセレクタで子要素の内の要素を検索 |
find_element_by_tag_name(name) | 子要素内の要素をタグ名(h1やtrなど)で検索 |
find_element_by_name(name) | 子要素内の要素をnameプロパティで検索 |
find_element_by_link_text(link_text) | リンクのテキスト文字列で検索 |
find_element_by_partial_link_text(link_text) | リンクのテキスト文字列の一部で検索 |
find_element_by_xpath(xpath) | xpathで要素を検索 |
###find_elements
基本的に検索方法はfind_elementと同じです。
※find_elementとは違いリスト型で返ってくるので注意!!
リストで返ってくるということに注意しないとメソッドが使えず、なんで!!ってなります(私はなりました)
method | |
---|---|
find_elements_by_id(id) | 子要素内の要素をIDで検索 |
find_elements_by_class_name(class) | 子要素内の要素をClassで検索 |
find_elements_by_css_selector(css_selector) | CSSセレクタで子要素の内の要素を検索 |
find_elements_by_tag_name(name) | 子要素内の要素をタグ名(h1やtrなど)で検索 |
find_elements_by_name(name) | 子要素内の要素をnameプロパティで検索 |
find_elements_by_link_text(link_text) | リンクのテキスト文字列で検索 |
find_elements_by_partial_link_text(link_text) | リンクのテキスト文字列の一部で検索 |
find_elements_by_xpath(xpath) | xpathで要素を検索 |
find_elementやfind_elementsには複数種類があるためどれを使うべきなんだ、という話もありますが、それは今回割愛。個人的にはxpathとかリンクテキストは使わないほうがいいと思っています…
###click()
要素をクリックします。
###text
要素のテキストを取得します。
###clear()
テキストを入力できる要素の場合、記載されているテキストがクリアされます。
###send_keys(value)
要素に入力をします。使用するのに下記が必要。
from selenium.webdriver.common.keys import Keys
get_attribute(name)
指定された属性または要素のプロパティを取得します。
指定された属性がない場合はNoneが返ってきます。
###is_displayed()
要素が表示されているか。
###is_selected()
要素が選択されているか。
ラジオボタンやチェックボックスが選択されているかを取得することができます。
サンプルコード
おまけ程度のサンプルコードです。
紹介したので使ってないものもあるけど、難しくはないです。
ちょいちょい省略しているのは許してください。
<body>
<form>
<h2>名前</h2>
<input id="name" type="text" maxlength="50">
<h2>好きな動物</h2>
<select name="dropdown">
<option value="elephant">ゾウさん</option>
<option value="lion">ライオンさん</option>
<option value="giraffe">キリンさん</option>
<label><input type="checkbox" id="chk" checked>チェックボックス</label>
<input type="submit" id="agree_and_goto_next">
</form>
</body>
def test_change_params(self):
#名前を入力する
name = driver.find_element_by_id('name')
name.clear()
name.send_keys('arisa yamamoto')
#プルダウンでライオンさんを選択
dropdown = Select(driver.find_element_by_id('dropdown'))
dropdown.select_by_value('1')
#チェックボックスにチェックを入れる
chk_box = driver.find_element_by_id('chk')
if chk_box.is_selected is False:
chk_box.click()
#同意ボタンを押下
agr_btn = driver.find_element_by_id('agree_and_goto_next')
agr_btn.click()
おわりに
今では簡単に思えますが、全くの初心者だとわからないことだらけすぎたことがわかりました。
これからもメモを取りつつ精進します。