2015-03-30 225 views
1

下面的代碼適用於Firefox,但是當我設置browser = webdriver.Chrome()時,我遇到了一些問題。Selenium ... Program Works適用於Firefox,但不適用於Chrome

browser = webdriver.Firefox() 
browser.get('https://www.voilanorbert.com/') 
inputElement = browser.find_element_by_id("form-search-name") 
inputElement.send_keys(leadslist[i][0]) 
inputElement = browser.find_element_by_id("form-search-domain") 
inputElement.send_keys(leadslist[i][1]) 
searchbutton = browser.find_element_by_name("search") 
searchbutton.click() 

wait = WebDriverWait(browser, 20) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results"))) 
h3s = browser.find_elements_by_css_selector('h3.one') 
h3 = next(element for element in h3s if element.is_displayed()) 
result = h3.text 

隨着鉻,一切都很好,直到我需要提取文本。我得到這個錯誤:

h3 = next(element for element in h3s if element.is_displayed()) 
StopIteration 

編輯
問題再次顯示出來兩個Firefox和Chrome。我甚至加了一口流利的等待。

wait = WebDriverWait(browser, 20) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results"))) 
wait2 = WebDriverWait(browser, 3000, poll_frequency=100, ignored_exceptions=[ElementNotVisibleException]) 
wait2.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "h3.one"))) 
h3s = browser.find_elements_by_css_selector('h3.one') 
h3 = next(element for element in h3s if element.is_displayed()) 
result = h3.text 

我得出結論,硒是絕對不完美的。

+0

如何定義'h3s'? – alecxe 2015-03-30 19:39:25

+0

編輯顯示。只是忘了張貼該行。 – ohbrobig 2015-03-30 20:41:30

回答

1

我懷疑這裏的關鍵問題是動畫發生在結果顯示時。

你需要讓selenium知道你想讓它等待通過implicitly_wait()一個元素搜索之前:

wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results"))) 

# okay, selenium, slow down, please 
browser.implicitly_wait(3) 
h3s = browser.find_elements_by_css_selector('h3.one') 

(爲我工作)

+0

工作太... ...(一旦我把等待時間改變了一點點,10秒) – ohbrobig 2015-03-30 22:45:40

+0

沒關係......曾經工作過一次,但不是再次。 – ohbrobig 2015-03-30 23:46:29

+0

所以它不適用於Chrome或Firefox。即使在添加流暢的等待之後,我仍然收到相同的錯誤: – ohbrobig 2015-04-07 23:58:31

相關問題