Django Girls and Boys 備忘録

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

【Python Selenium】ウインドウ表示などでのWaitの方法、待機方法

 

 

目次

 

先日以下の過去記事で、Selenium上でのウインドウの切替方法について記載しました。

 

 

kuku81kuku81.hatenablog.com

 

 

概略の内容としては、

 

# ウィンドウハンドルを取得する
newhandles = driver.window_handles

 

などで、ウインドウハンドルを取得した後、

 

# driverでの操作できるウインドウを切り替える
driver.switch_to.window(newhandles [1])

 

や、

 

# driverでの操作できるウインドウを切り替える
driver.switch_to.window(newhandles [-1])

 

などで、driverが扱えるウインドウを切り替えることになります。

ただし、Webサイトの表示の場合、新規ウインドウの表示操作などを行ってから実際に表示されるまでには時間差があります。

 

必要な要素が表示される前に次の操作を行ってしまうと要素が存在しないということでエラーが表示されます。

 

そこで「表示が終了するまで待つ」という処理が必要になります。

 

 

これについてはいくつか方法があります。

 

1.time.sleep()での待機

 

単純に何秒か待つ場合は、

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from selenium.webdriver.chrome import service as fs

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.com/')

# 3秒待機 time.sleep(3) # 検索文字列を入力 search_bar = driver.find_element(By.NAME,"q") search_bar.send_keys("abc")

 

のように、time.sleep()を使用します。

 

上の例の場合、

    driver.get('https://www.google.com/')

で、Google検索画面の表示処理実行後

    time.sleep(3)

で、3秒間待ちます。

 

2.implicitly_wait()での待機

 

もう1つの方法は、

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os
from selenium.webdriver.chrome import service as fs

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.com/')

# 10秒待機 driver.implicitly_wait(10) # 検索文字列を入力
element = driver.find_element(By.NAME,"q") element.send_keys("abc")

 

のように、implicitly_wait()を使用する方法です。

    implicitly_wait()

では、その次の、

    find_element_by_name()

などで、要素が見つかるまで指定した秒数待機します。

上の例では、

    driver.find_element(By.Name,"q")

で、「q」という名前の要素が見つかるまで最大10秒間待機します。

その間に要素が見つかれば次に進んで行きます。

 

3.WebDriverWait()での待機

 

最後の1つの方法は、

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
from selenium.webdriver.chrome import service as fs

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.com/')

#qという名前の要素が見つかるまで10秒間待機 element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "q"))) element.send_keys("abc")

 

のように、WebDriverWaitを使用する方法です。

これも、ある要素などが見つかるまで指定した秒数待機するというものです。

上の例では、「q」という名前の要素が見つかるまで最大10秒待機するというものです。

これも途中で要素が見つかれば次に進んで行きます。

 

待機処理はいくつか方法がありますので、実際に使ってみてその時々であったものを使用してみてください。

 

 

 

 

 

 

 

また、PythonにてSeleniumを活用してスクレイピング、RPA化などを行っていく場合に必要となりそうな内容の記事を一覧として以下にまとめましたのでよかったらご参照ください。

 

 

kuku81kuku81.hatenablog.com

 

 

関連記事:

【PythonからWeb操作】seleniumのインストール手順 - Django Girls and Boys 備忘録

 

【PythonによるExcelファイルの読み書き】PythonのダウンロードからExcelファイルの読み書きまでの一通りすべての方法 - Django Girls and Boys 備忘録

 

【PythonでのExcelファイル読み書き方法】ファイルオープンしているファイル(アクティブファイル)への書込方法 - Django Girls and Boys 備忘録

 

【Python Selenium】Webサイトのスクレイピングなどで必要なフレーム間移動方法 - 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】キー入力によるプログラム終了処理、ループを抜けて次の処理へ移行する処理 - Django Girls and Boys 備忘録

 

【Python Selenium】EdgeのI.E.モードのドライバー設定での拡大率、保護モード設定チェックを無視する方法 - Django Girls and Boys 備忘録

 

【Python】ログイン中のユーザ名を取得する方法 - Django Girls and Boys 備忘録