🙆‍♂️

正規表現を使って Selenium 3.x から Selenium 4.x 用の記述方法に置換する方法

2022/03/11に公開

背景

今まで 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>

Discussion