PythonでSeleniumを利用してウインドウアクセスする場合には、まずは、対象のウインドウを表示させるところからはじまります。
それについては、過去記事で記載しましたので、今回はそれに続いて必要になってくるウインドウ内の要素取得とその操作についてになります。
また、簡単な使用例として載せているものは、Chrome用になります。
Edge用の例については、こちらに載せていますのでご参照ください。
目次
まずはじめに、ウインドウを開いた後に操作したい要素を取得する方法としてはいくつかあります。
1.class属性値から要素を取得する方法
driver.find_element(By.CLASS_NAME, "class_a")
要素についているclass属性値から要素を取得する場合には、
driver.find_element(By.CLASS_NAME,"class属性値")
のような形式で指定します。
以下は、Chromeにて、Yahoo検索画面のURLを指定して画面表示させ、class属性値から検索テキストボックスの要素を取得して変数elementに入れるまでのコード例となります。
(Chrome用のドライバーchromedriver.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()+'\chromedriver.exe' # ドライバー指定でChromeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_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属性値")
のような形式で指定します。
以下は、先程と同様、Chromeにて、Yahoo検索画面のURLを指定して画面表示させ、name属性値から検索テキストボックスの要素を取得して変数elementに入れるまでのコード例となります。
(Chrome用のドライバーchromedriver.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()+'\chromedriver.exe' # ドライバー指定でEdgeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_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()+'\chromedriver.exe' # ドライバー指定でEdgeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_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("キーボード入力内容")
のような形式で指定します。
以下は、Chromeにて、Google検索画面のURLを指定して画面表示させ、name属性値から検索テキストボックスの要素を取得して変数elementに入れ、elementに対してsend_keysメソッドにて"abc"とキーボード入力するまでのコード例となります。
(Chrome用のドライバーchromedriver.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()+'\chromedriver.exe' # ドライバー指定でEdgeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_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 ###################################################################### path_driver = os.getcwd()+'\chromedriver.exe' # ドライバー指定でEdgeブラウザを開く chrome_service = fs.Service(executable_path=path_driver) driver = webdriver.Chrome(service=chrome_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を使用して画面表示後に、要素を取得し、取得した要素にキーボード入力するまでの実施例となります。
関連記事:
【Python】キーボード、キー入力判定方法 - Django Girls and Boys 備忘録
【Python】keyboardライブラリでのキー入力検出に使用可能なキーの種類 - Django Girls and Boys 備忘録
【PythonからWeb操作】seleniumのインストール手順 - Django Girls and Boys 備忘録
【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録
【PythonでのExcelファイル読み書き方法】ファイルオープンしているファイル(アクティブファイル)への書込方法 - Django Girls and Boys 備忘録
【Python Selenium】ブラウザ用ドライバーのダウンロードとインストール方法 - Django Girls and Boys 備忘録
【PythonからWeb操作】selenium、各ブラウザ用ドライバーの最新バージョン確認、ダウンロード場所 - Django Girls and Boys 備忘録
【Python Selenium】新規ウインドウ追加時のウインドウ切替方法 - Django Girls and Boys 備忘録
【Python Selenium】ウインドウ表示時などでのWaitの方法、待機方法 - Django Girls and Boys 備忘録
【Python Selenium】新規ウインドウ(新規タブ)追加時のウインドウ切替方法(追加ハンドルをハンドル差異比較にて取得) - Django Girls and Boys 備忘録
【Python Selenium】EdgeのI.E.モードでブラウザ操作する場合のドライバー設定方法と簡単な起動例 - Django Girls and Boys 備忘録
【Python】キー入力によるプログラム終了処理、ループを抜けて次の処理へ移行する処理 - Django Girls and Boys 備忘録
【Python Excel】ExcelからのPython実行ファイル(アプリケーションファイル)起動方法 - Django Girls and Boys 備忘録
【Python】ログイン中のユーザ名を取得する方法 - Django Girls and Boys 備忘録
【Python Selenium】クローリング、スクレイピングにて対象ウインドウのソースコードを調べる方法 - Django Girls and Boys 備忘録
【Python Selenium 要素取得】ウインドウハンドル取得方法(Chrome用) - Django Girls and Boys 備忘録
【Python Selenium】ウインドウ内の要素取得、キーボード入力などする方法(name属性、id属性、class属性)(Chrome用) - Django Girls and Boys 備忘録
【Python】エスケープシーケンス(エスケープ文字)について - Django Girls and Boys 備忘録
【Python Selenium】f文字列(フォーマット文字列)、r文字列(raw文字列)について - Django Girls and Boys 備忘録