Django Girls and Boys 備忘録

Python、Django、java、iPhoneアプリ,Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Python Selenium】ウインドウ内の要素取得、キーボード入力などする方法(name属性、id属性、class属性)


PythonSeleniumを利用してウインドウアクセスする場合には、まずは、対象のウインドウを表示させるところからはじまります。

 

それについては、過去記事で記載しましたので、今回はそれに続いて必要になってくるウインドウ内の要素取得とその操作についてになります。

 

 

 

目次

 

まずはじめに、ウインドウを開いた後に操作したい要素を取得する方法としてはいくつかあります。

 

 

1.class属性値から要素を取得する方法

 

driver.find_element(By.CLASS_NAME, "class_a")

 

要素についているclass属性値から要素を取得する場合には、

 

driver.find_element(By.CLASS_NAME,"class属性値")

 

のような形式で指定します。

 

以下は、Edgeにて、Yahoo検索画面のURLを指定して画面表示させ、class属性値から検索テキストボックスの要素を取得して変数elementに入れるまでのコード例となります。

(Edge用のドライバーmsedgedriver.exeは同じフォルダに入れた状態で実行)

 

from selenium import webdriver
import os
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

######################################################################
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
######################################################################

driver.get('https://www.yahoo.co.jp/')
#検索テキストボックスの要素をClass名から取得
element = driver.find_element(By.CLASS_NAME, "_1wsoZ5fswvzAoNYvIJgrU4")

 

上記の例で入力したclass属性値は現在のclass属性値ですが、これは時と共に変更されていくのかもしれません。

 

 

2.name属性値から要素を取得する方法

 

driver.find_element(By.NAME, "name_a")

 

要素についているname属性値から要素を取得する場合には、

 

driver.find_element(By.NAME,"name属性値")

 

のような形式で指定します。

 

以下は、先程と同様、Edgeにて、Yahoo検索画面のURLを指定して画面表示させ、name属性値から検索テキストボックスの要素を取得して変数elementに入れるまでのコード例となります。

(Edge用のドライバーmsedgedriver.exeは同じフォルダに入れた状態で実行)

 

from selenium import webdriver
import os
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

######################################################################
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
######################################################################

driver.get('https://www.yahoo.co.jp/')
#検索テキストボックスの要素をname属性値から取得
element = driver.find_element(By.NAME, "p")

 

また、Google検索画面で同様の指定、取得をする場合は以下のようになります。

 

from selenium import webdriver
import os
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

######################################################################
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
######################################################################

driver.get("https://www.google.co.jp")
#検索テキストボックスの要素をname属性値から取得
element = driver.find_element(By.NAME, "q")

 

 

 

 

3.id属性値から要素を取得する方法

 

driver.find_element(By.ID, "id_a")

 

要素についているid属性値から要素を取得する場合には、

 

driver.find_element(By.ID,"id属性値")

 

のような形式で指定します。

 

name属性値の場合には、画面内に同じnameが複数存在する場合がありますが、id属性値は1つしか存在しない属性値になるため、id属性値がついていればこちらを指定した方がいいかもしれません。

 

Google,Yahooの検索用テキストボックスにはid属性はついていないようなので使用例は特にないですが、使い方はname属性と同じです(By.NAME→By.ID、"name属性値"→"id属性値")。

 

 

4.取得した要素にキーボード入力する方法

 

element.send_keys("abc")

 

name属性値、id属性値などから取得した要素にキーボード入力する場合には、

 

driver.send_keys("キーボード入力内容")

 

のような形式で指定します。

 

以下は、Edgeにて、Google検索画面のURLを指定して画面表示させ、name属性値から検索テキストボックスの要素を取得して変数elementに入れ、elementに対してsend_keysメソッドにて"abc"とキーボード入力するまでのコード例となります。

(Edge用のドライバーmsedgedriver.exeは同じフォルダに入れた状態で実行)

 

from selenium import webdriver
import os
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
######################################################################
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
######################################################################

driver.get("https://www.google.co.jp")
#検索テキストボックスの要素をname属性値から取得
element = driver.find_element(By.NAME, "q")

#検索テキストボックスに"abc"を入力
element.send_keys("abc")
#Enterキーをクリックして検索
element.send_keys(Keys.ENTER)

 

最後の行は、

element.send_keys(Keys.ENTER)

ではなく、

element.submit()

でも同様です。

 

同様のことを、Yahoo検索画面で実行すると以下のようになります。

 

from selenium import webdriver
import os
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
######################################################################
path_driver = os.getcwd()+'\msedgedriver.exe'
# ドライバー指定でEdgeブラウザを開く
edge_service = fs.Service(executable_path=path_driver)
driver = webdriver.Edge(service=edge_service)
######################################################################

driver.get('https://www.yahoo.co.jp/')
#検索テキストボックスの要素をname属性値から取得
element = driver.find_element(By.NAME, "p")

#検索テキストボックスに"abc"を入力
element.send_keys("abc")
#Enterキーを押下して検索を実行
element.send_keys(Keys.ENTER)

 

これも、最後の行は、

element.send_keys(Keys.ENTER)

ではなく、

element.submit()

でも同様です。

 

以上が、Seleniumを使用して画面表示後に、要素を取得し、取得した要素にキーボード入力するまでの実施例となります。