記事内に広告が含まれています。

【Python】Seleniumでフォームに入力されたテキストがClearで消えない時の対処法

Python SeleniumでテキストフォームがClearで消えない時の対処法 IT
IT

pythonでスクレイピングをすることがあるのですが、
ある日突然、対象のホームページのデザイン等が変わってしまい
テキストボックス内の文字が、Clearで消えないという現象が発生しました。

対処方法があるのでメモとして残しておきます。

スポンサーリンク
     

まずはClearでテキストボックスの文字を消す方法

テキストボックスに入っている文字を消す時に、これが一般的に使われる方法です。
私もこちらを使用していました。
一行で済むので、こちらが使える場合は使いましょう。

driver.find_element_by_id( 'hoge' ).clear

大体の場合はこれで削除することができます。

Clearが効かない場合の対処法

1つ目の方法をまず試してみてください。
ほとんどの場合でこちらが対処法として使えると思います。

【おすすめ】sendKeysで全選択削除する対処法

Clearが使えない場合、sendKeysの方を使います。
sendKeysを使用するにはimportが必要です。

from selenium.webdriver.common.keys import Keys

driver.find_element_by_id( 'hoge' ).send_keys( Keys.CONTROL + "a" )
driver.find_element_by_id( 'hoge' ).send_keys( Keys.DELETE )

CtrlキーとAキーでテキストボックスの全選択、からのDeleteキーで文字を削除しています。
Clearが効かない場合はこっちで消えるはずです。

Backspaceを使う対処法

同じsendKeysで、テキストボックスの文字数を取得して、その文字数分の回数のBackspaceキーを押させる方法もあります。

from selenium.webdriver.common.keys import Keys

text = driver.find_element_by_id( 'hoge' ).get_attribute( 'value' )
driver.find_element_by_id( 'hoge' ).send_keys( Keys.BACKSPACE * len(text) )

これは文字数によっては消すのに時間がかかってしまうのであまりオススメは出来ません。

もし Ctrl + AとDeleteで対応出来ない場合はBackspaceの方も試してみてください。

最後に

困った時のsendKeys。

速度的にはClearの方が早いはずだし、一行で済みimportも必要ないので、出来ることならClearを使用した方が良いと思います。
しかし、サイト側の構成によっては使用できないことがあるので、その時は参考にしてください。