2017-09-19 11 views
1

私は自動的に私のために賭けるスクリプトを書いている(私は知っている、それはプロジェクトだ、私はお金を稼ぐことを期待していない、それはT & Csに対して)と私はBet365。私は多くのElementNotVisibleException: Message: element not visibleエラーが発生しました。パスワードフィールドにパスワードを入力できないため、ログインしようとすると最初に遭遇しました。私は、JavaScriptのコマンドを送信することにより、その周りを得た:多くの目に見えない要素を扱う

driver.find_element_by_css_selector("div.hm-Login_UserNameWrapper > input.hm-Login_InputField").send_keys(config.BET365_USERNAME) 

driver.execute_script("document.getElementsByClassName('hm-Login_InputField Hidden')[0]" 
         ".setAttribute('value', '" + config.BET365_PASSWORD + "')") 

driver.find_element_by_css_selector("body > div:nth-child(1) > div > div:nth-child(1) > div > " 
            "div.hm-HeaderModule_Primary > div.hm-HeaderModule_UserAdmin > div > " 
            "div.hm-Login_PasswordWrapper > button").send_keys(Keys.ENTER) 

私はこれを行うたら、私が行って、1.33のいずれかのオファーを見つけることを試みる:確かに私の要素を見つけるん

low_odd = driver.find_elements_by_xpath("//*[contains(text(), '1.33')]")[0] 

を。 low_odd.click()を実行しようとすると、エラーElementNotVisibleExceptionが返されます。

このlow_odd要素のパスを取得する方法はありますか?そのため、別のJavaSciptコマンドを送信して自分のbetslipで選択することはできますか?またはこれらのエラーを回避する他の巧妙な方法?

+0

それは要素見えない、ではない要素が見つかりませんを報告するため。要素がDOMツリーに存在することを意味します。しかし、要素に相当しない存在がブラウザーでレンダリングを完了しました(ページから要素を見ることができます)。したがって、私たちは頭に入れておく必要があります:コーディング時にページの読み込みを待つようにしてください。もう1つ、セレンは、一般的には100〜300ミリ秒で、あなたが思っているよりも速いページ上の操作で完了します。ページのオープン/リダイレクト後に明示的な待機を追加してみてください。 – yong

答えて

0

Seleniumは、表示されないが、アクションを実行しない要素(クリックなどはエラーをスローする)を探します。 Seleniumはユーザーができる要素に対してのみアクションを実行するという設計です。ユーザーは目に見えない要素をクリックすることはできません。

要素のコレクションは、表示されているもの(表示可能)のみに絞り込むことができます。

フィルタリングされたリストを取得したら、それをループして、それぞれを1回だけ、または最初のものだけをクリックします。

注:上記のコードはテストされていません。私はpythonの人ではありませんので、正確には正しくないかもしれないし、非常にpython-yかもしれません。あなたは少しそれを微調整する必要があるかもしれません。フィルタリング基準について

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

関連する問題