this siteにログインしようとしています。しかし、私はユーザー名でテキストボックスを埋めることさえできません。クリックするまで隠れたテキストボックスにキーストロークを送信するには?
私が試した:
暗黙的および明示的な待機
ユーザ名が内に封入されたテキストボックスの
構造のJavaScript
を実行をタグで、width属性を使用して検索できます。テキストボックス自体は2つのinput
タグで表されます。最初のものは隠されています。どちらも属性がstyle
です。最初の値の初期値はdisplay: none;
で、テキストボックスをクリックするとdisplay: inline-block;
に変更されます。また、2番目の入力タグのstyle
属性はdisplay: none;
に設定されています。ユーザー名テキストボックスのフォーカスが失われると、これらの両方がトグルされます。 Iは、暗黙的および明示的の両方待機を使用してみました
待機
。明示的な待機を実装するコードがTimeoutException
エラーが発生しました:
を実行
wait = WebDriverWait(driver, 10)
elem_username = wait.until(EC.visibility_of_element_located((By.ID, 'txt_username')))
どちらinput
タグがonfocus
とonchange
属性を持っています。私は後者について気にしなかった(私の目標は、テキストボックスにキーストロークを最初に取得することだった)。 onfocus
の値はSetEnd(this)
です。だから私はそれを実行しようとしました。
問題は、JavaScriptの実行に役立つドキュメントが見つかりませんでした。だから私はStackOverflowでいくつかの関連する答えをここで見た。私はこれを最初に試しました:
elem_username = driver.find_element_by_id('txt_username')
driver.execute_script('SetEnd(this)')
私は要素に言及していなかったので、もちろん、私はそれが動作しないことを知っていた。だから、もう少し質問を閲覧した後、私はexecute_scriptが引数を取ったことを知りました。だから私は、スクリプトのようなものは、このようには機能しなかったと述べたエラーが発生したコードを、修正:
driver.execute_script('arguments[0].SetEnd(this)', elem_username)
その後、私はexecute_script
内の「クリックを()」を使用して答えを見ました。だから、私もそれを試しました:
driver.execute_script('arguments[0].click()', elem_username)
「クリック()」は、ボタンのみたいです。しかし、私は、テキストボックスにフォーカスを移すために「クリック」しなければならないので、それはうまくいくと思いました。それはしませんでした。
これは例外なく、ElementNotInteractableException
エラーを上げるまま、私は私の試みの全てで実行された最後の行、次のとおりです。
elem_username.send_keys('blahblahblah')
要件
Q &として、このサイト上だろう私がもう少し経験があれば、もちろん、優れているでしょう。たとえば、明示的な待機を示すいくつかの回答がありますが、そのほとんどはOPの問題を解決することを目的としていたため、関連するコード部分のみが含まれていました。私がそれらを理解するのは難しかったです。
私はこの問題(サイトにログインしています)を解決したいと思いますが、はセレンを正しく学習することを願っています。以前はJavaなど他の言語でもそれを扱っていませんでした。公式文書はいいですが、私はそれを使ってこの問題を解決することができませんでした。だから私はより初心者にやさしいチュートリアルが欲しい。
私にとってもうまくいった。なぜ2つのテキストボックスが表示されるのか考えていますか? https://imgur.com/a/yWcYb – Mahesh
舞台裏でどのようなスタイリングが使用されているのかわかりません。また、インタラクティブなjavascriptコードが要素に対して何をしているのかよくわかりません。それは、オブジェクトのミラーが表示されることは奇妙に見えます。ページソースに重複エントリが表示されません。 –
あなたのソリューションはこの問題を解決しました。しかし、私が質問したように、私はこれを正しい方法で学びたいと思っています。どうすればいいのか教えてください。 – Mahesh