Python Selenium element not interactable

PC

PythonのSeleniumを使って面倒な作業は自動化させています。
とくにブログに画像ファイルをアップロードさせる作業などは、予め自動でサーバーに載せておいたほうが後々楽だったりするので、そういうときにもSeleniumのプログラムは役に立ちますね。
アップロードをさせるのにファイル選択のボタンから、自PCのフォルダからファイルを選択してアップロードボタンを押して、というのを繰り返すのも面倒だったりするので。

そんな作業をプログラムするときによく躓くのが、「element not interactable」というエラー。
クリックしたいのに出来ない、とか、情報を送り込んでくれない、とかそういう系統です。
エレメントは見つかっているのに何でダメかなぁ、と言いたくなりますが、大抵の場合、次の2つのパティーンに分けられます。

1.複数のエレメントがあって、望みのものじゃない方を選択してしている

例えばこんな文。

element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'admin_common_positive_btn')))
element.click()

「admin_common_positive_btn」というクラスで見つけ出したelemenntをクリックさせたい。
なのに「element not interactable」と返ってくる。
いやいやいや、ボタンって書いてあるやん。
押せるでしょ。押させてよ。と思うわけですが…。
何度やっても無理。
もしかして、このクラスが複数ある?
ということで

elements = driver.find_elements_by_class_name('admin_common_positive_btn')
print(len(elements))

としてみたら、2とか3とか、複数の数字が返ってきまして、そういうことか、と。

elements = driver.find_elements_by_class_name('admin_common_positive_btn')
elements[1].click()

としてみたらとりあえずは動いたのでヨシ。
必ずしも常に2番めに望みのボタンがあるとは限らないので、本当はもう少し詰めないといけないのでしょうが、とりあえずはこれで。
実務的には、クラスでなく常にページ内で一つに絞れる何かを見つけられれば、それを使うほうが良いとは思います。
IDとか。

2.インプットできないクラスにインプットさせようとしている。

例えばこんなHTMLで書かれたアップロード先。

<div class="FileUploader_header">
 <span><span id="spanButtonPlaceHolder">ファイル選択</span>
  <input name="upfile[]" type="file" multiple="true">
 </span>
<p>Ctrlキーを押しながらファイルを同時に選択できます。</p>
</div>

Chromeで開いた見え方はこんな感じです。

アップロード先のクラスは「FileUploader_header」なんだな、ということで

drop_btn = driver.find_element_by_id('spanButtonPlaceHolder')
drop_btn.send_keys(ImgFlePath + flename)

こんな文章でアップロードさせようとして失敗。
同様にクラスで指定し「FileUploader_header」を選択しても失敗。
これを、

drop_btn = driver.find_element_by_name('upfile[]')
drop_btn.send_keys(ImgFlePath + flename)

としたら成功しました。
インプットを受け付ける要素でないと受け付けない、というシンプルな結論でした。
少しググって、「divタグに入力は出来ませんよ」という書き込みを見て気づいたのでした。

Selenium本

Selenium実践入門 ーー自動化による継続的なブラウザテスト【電子書籍】[ 伊藤望 ]
Selenium実践入門 ーー自動化による継続的なブラウザテスト【電子書籍】[ 伊藤望 ] 3,630円(税込)【送料込】

楽天Kobo電子書籍ストア

<p>ブラウザの多様化に伴い,Webアプリケーションをクロスブラウザ対応にするための負荷がますます増加し,その解決の一つとしてテスト自動化のノウハウが開発現場で必要とされています。また継続的インテグレ

Selenium実践入門 自動化による継続的なブラウザテスト (WEB+DB press plusシリーズ) [ 伊藤望 ]
Selenium実践入門 自動化による継続的なブラウザテスト (WEB+DB press plusシリーズ) [ 伊藤望 ] 3,630円(税込)【送料込】

楽天ブックス

自動化による継続的なブラウザテスト WEB+DB press plusシリーズ 伊藤望 戸田広 技術評論社セレニウム ジッセン ニュウモン イトウ,ノゾミ トダ,ヒロシ 発行年月:2016年02月02

【中古】Selenium実践入門 / BanthiaVishal (単行本)
【中古】Selenium実践入門 / BanthiaVishal (単行本) 500円(税込)【送料込】

ネットオフ 送料がお得店

    Selenium実践入門 単行本 の詳細 出版社: 技術評論社 レーベル: WEB+DB PRESS plusシリーズ 作者: BanthiaVishal カナ:

Selenium with Python - A Beginner’s Guide Get started with Selenium using Python as a programming la
Selenium with Python - A Beginner’s Guide Get started with Selenium using Python as a programming la 2,647円(税込)【送料込】

楽天Kobo電子書籍ストア

<p>Selenium is the most popular open source test automation tool available in the market. In the las

【中古】 Selenium実践入門 自動化による継続的なブラウザテスト WEB+DB PRESS plusシリーズ/伊藤望(著者),戸田広(著者),沖田邦夫(著者),宮田淳平(著者),長谷川淳(著者)
【中古】 Selenium実践入門 自動化による継続的なブラウザテスト WEB+DB PRESS plusシリーズ/伊藤望(著者),戸田広(著者),沖田邦夫(著者),宮田淳平(著者),長谷川淳(著者) 605円(税込)【送料別】

ブックオフ 楽天市場店

伊藤望(著者),戸田広(著者),沖田邦夫(著者),宮田淳平(著者),長谷川淳(著者)販売会社/発売会社:技術評論社発売年月日:2016/01/01JAN:9784774178943

楽天ウェブサービスセンター
タイトルとURLをコピーしました