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を使用した方が良いと思います。
しかし、サイト側の構成によっては使用できないことがあるので、その時は参考にしてください。
¥3,630 (2023/05/24 19:14時点 | Amazon調べ)
ポチップ