質問: driver.find_elements_by_xpath(xpath)[0] tmp.send_keys("ポイント") tmp.send_keys(Keys.RETURN) ``` エラー内容 ----- ``` selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable ``` 数秒待機してみたりしているのですが、 検索へクリックできてないようです。 この場合どのようにしたらseleniumで検索できますでしょうか?
回答: 検索BOXが疑似要素(::before, ::after)内にあるためseleniumが触れられない可能性があります。 参考 念のため以下のコマンドで検索BOXが見えているか確認してみてください。 エラーの内容的にまず見えているとは思いますが。 ``` print(driver.page_source) ``` ### コメント受けて追記 だとしたら見えている可能性が高いので以下を実施してみてください。 あなたが打ち込もうとした検索ボックスをクリックして、 右クリック→検証を押してみてください。開発者ツールが開くと思います。 そして、その要素は3個あるうちの2個目か3個目を指しているでしょう。 2個目の要素は画面最上部右の検索ボックスを、 3個目の要素は画面最下部左の検索ボックスを指すように このサイトは作られています。 あなたのプログラムにはコメントアウトしてありますが ウィンドウを一番下にスクロールしようとした形跡があるので、 3個目を指している可能性が高いですね。 開発者ツールのConsoleタブを開いて、以下を入力してみてください。 ``` document.getElementsByName(’s’)[2].value = (‘ポイント’) ``` 検索ボックスに「ポイント」と入力されているはずです。 (円マークはバックスラッシュに置き換えてください) これをpythonに埋め込むと以下のようになります。 ``` driver.execute_script(‘document.getElementsByName(¥’s¥’)[2].value=¥’ポイント¥’’) ``` もしくはpythonのSeleniumを使って以下の通りです。 ``` driver.find_elements_by_name(’s’)[2].send_keys(’ポイント’) ``` このサイトは横の虫眼鏡マークをクリックしなくても、 Enterキーを押すだけで検索に突入する仕様のようですので、 ``` driver.find_elements_by_name(’s’)[2].send_keys(Keys.RETURN) ``` これで検索できるはずです。 この例ではname属性を使って何個目かを数えましたが、 あなたが実施しているようにxpathでも可能です。 私はhtmlやcssに詳しくないので どのような作りになっているか分かりませんが、 先ほどの開発者ツールで1個目の要素を選択してみて下さい。 GUI上のどこにも青い四角が表示されないはずです。 この隠された要素(=1個目の要素)に対して エレメントを操作しようとしたため、 「DOM上に存在するが対話できる状態ではない」という意味の ElementNotInteractableExceptionエラーが発生していたというわけです。 つまりあなたのプログラムの変数tmpの宣言時の リストの添え字を1か2に変えるだけでも動くはずですよ。