2015-03-02 94 views
-2

我有以下代碼:Python的硒NoSuchElementException異常

browser.find_element_by_css_selector('#bet').send_keys(2500) 
time.sleep(2) 
x = 0 
while x < 100: 
    browser.find_element_by_css_selector('#start_game').click() 
    time.sleep(3) 
    browser.find_element_by_css_selector('li.tile:nth-child('+str(random.randint(1, 25))+')').click() 
    time.sleep(2) 
    browser.find_element_by_css_selector('li.tile:nth-child('+str(random.randint(1, 25))+')').click() 
    time.sleep(2) 
    browser.find_element_by_css_selector('li.tile:nth-child('+str(random.randint(1, 25))+')').click() 
    time.sleep(5) 
    try: 
     browser.find_element_by_css_selector('.cashout').click() 
    except NoSuchElementException: 
     browser.find_element_by_css_selector('#start_game').click() 
    time.sleep(10) 
    x = x+1 

那麼我的代碼玩minesweaper遊戲比特幣。所有作品都非常棒,他下注,隨機點擊3盒開始遊戲。當他成功點擊3個盒子並且沒有炸彈出現按鈕時,但是當腳本點擊炸彈時,出現按鈕不會出現,並且我得到nosuchelement。

我試着使用:

try: 
    browser.find_element_by_css_selector('.cashout').click() 
except NoSuchElementException: 
    browser.find_element_by_css_selector('#start_game').click() 

情況下,他點擊炸彈和兌現似乎並沒有開始一個新的遊戲...但沒有奏效。有人能幫我嗎 ?

回答

2

您確實需要切換到Explicit Waits而不是硬編碼睡眠呼叫。

等待cashout元素變得可見,然後單擊:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

try: 
    element = WebDriverWait(browser, 10).until(
     EC.visibility_of_element_located((By.CSS_SELECTOR, ".cashout")) 
    ) 
    element.click() 
except TimeoutException: 
    browser.find_element_by_css_selector('#start_game').click() 
+0

是的多數民衆贊成它。但現在的問題是他開始2場比賽... – Unchangeable 2015-03-02 20:11:51

+0

@不能改變的好,我現在不能再多了。我無法重現你所看到的。我剛剛注意到你的情況下可能會出現什麼問題,希望它有所幫助。 – alecxe 2015-03-02 20:13:50

+0

無論如何感謝隊友。出現這個問題是因爲代碼循環... – Unchangeable 2015-03-02 20:15:47