正規表現を使って Selenium 3.x から Selenium 4.x 用の記述方法に置換する方法
背景
今まで Selenium 3.x を使っていたのですが、ひょんなことから Selenium 4.x にしたら警告(DeprecationWarning)が大量に出てきてしまったので、その対処法(正規表現による置換方法)を記事として残しておこうと思います。
find_element(s)に関する置換だけですので、それ以外は別途調べていただければと思います。
使用する際は自己責任でお願いいたします。
手順
Step1 検索する属性値のみ変数を使って置換
例えば、 Selenium 3.x で
find_element_by_class_name("class_abc")
と書いていたものを Selenium 4.x 用に
find_element(by=By.CLASS_NAME, value="class_abc")
と書き換えたい場合は、
以下のように正規表現を使って置換を行うと簡単に置換ができます。
Find:find_element_by_class_name\((.*?)\)
Replace:find_element\(by=By.CLASS_NAME, value=${1}\)
Step2 find_elementsにも対応した置換
また、 find_elements_by_class_name("〜") にも対応させたい場合は、以下のようにすれば良いです。
Find:(find_elements?)_by_class_name\((.*?)\)
Replace:${1}\(by=By.CLASS_NAME, value=${2}\)
Step3 タグ名や属性名に対応した置換
さらに以下のように指定することで複数要素の置換にも対応できます。今回の例ではclass_nameとtag_nameに対応しています。
Find: (find_elements?)_by_(class_name|tag_name)\((.*?)\)
Replace: ${1}\(by=By.\U${2}\E, value=${3}\)
<補足>
-
from selenium.webdriver.common.by import By
もお忘れなく! - ブラウザ起動時に「DeprecationWarning」が出ないようにする方法も参考URLを貼っておきます。
<参考URL>
- Web要素の検索:https://www.selenium.dev/ja/documentation/webdriver/elements/finders/
- 最短一致でマッチさせる正規表現:https://www-creators.com/archives/1804
- やりたいこと:文字列を一部を残したまま置換したい:https://watapipi.com/sakura_replace/
- Selenium 4で「DeprecationWarning」が出る場合の対策:https://self-development.info/selenium-4で「deprecationwarning」が出る場合の対策/
- 【正規表現】大文字/小文字への変換:https://outofmem.hatenablog.com/entry/2013/11/26/022339
Discussion