2017-09-19 61 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樹中。但存在與元素不等同的元素,已經完成了瀏覽器的渲染(你可以看到頁面中的元素)。所以我們應該記住:編碼時等待頁面加載,就像您等待頁面打開,然後您可以手動點擊/輸入。另一件事,硒在網頁上每次操作完成的速度比您想象的要快,一般爲100-300毫秒。嘗試在頁面打開/重定向後添加顯示等待。 – yong

回答

0

硒將定位不可見的元素,但不會對它們採取行動(點擊等發生錯誤)。設計是Selenium只會對用戶可能的元素採取行動,例如用戶不能點擊不可見的元素。

您可以將元素集合過濾爲僅顯示(顯示)的元素。

low_odd = [e for e in driver.find_elements_by_xpath("//*[contains(., '1.33')]") if e.is_displayed()] 

然後,一旦你有過濾列表,循環通過它,並點擊每一個或只有第一或任何你想要的。

注意:上面的代碼是未經測試的,我不是一個Python人,所以它可能不完全正確或非常python-y。你可能需要稍微調整一下。

用於過濾參考:https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions