LoginSignup
7
6

More than 3 years have passed since last update.

Python初心者が最初に調べまくってたWebDriverのメソッド

Last updated at Posted at 2019-12-22

はじめに

私自身は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()

要素が選択されているか。
ラジオボタンやチェックボックスが選択されているかを取得することができます。

サンプルコード

おまけ程度のサンプルコードです。
紹介したので使ってないものもあるけど、難しくはないです。
ちょいちょい省略しているのは許してください。

sample.html
<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>
sample.py
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()

おわりに

今では簡単に思えますが、全くの初心者だとわからないことだらけすぎたことがわかりました。
これからもメモを取りつつ精進します。

7
6
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
7
6