2012-11-12 103 views
0

我跟隨this video讓自己熟悉硒。我的代碼是Python:硒獲得空結果

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

from pyvirtualdisplay import Display 
import os 

chromedriver = "/usr/bin/chromedriver" 
os.environ['webdriver.chrome.driver'] = chromedriver 

display = Display(visible=0, size=(800,600)) 
display.start() 

br = webdriver.Chrome(chromedriver) 
br.get("http://www.google.com") 

現在打印結果

q = br.find_element_by_name('q') 
q.send_keys('python') 
q.send_keys(Keys.RETURN) 
print br.title 

results = br.find_elements_by_class_name('g') 
print results 

for result in results: 
    print result.text 
    print "-"*140 

我得到的輸出只是python,當我嘗試打印results[]

當我在chrome的javascript控制檯中嘗試下面的代碼時,它工作正常。

res = document.getElementsByClassName('g')[0] 
<li class=​"g">​…​</li>​ 
res.textContent 
"   Python Programming Language – Official Websitewww.python.org/Cached - SimilarShareShared on Google+. View the post.You +1'd this publicly. UndoHome page for Python, an interpreted, interactive, object-oriented, extensible programming language. It provides an extraordinary combination of clarity and ...CPython - Documentation - IDEs - GuiProgramming" 

所以,任何想法,爲什麼我沒有得到任何結果與硒+ python。

回答

3

q.send_keys(Keys.RETURN)之後加time.sleep(3)似乎解決了這個問題。這是因爲當你按下Keys.RETURN時,ajax開始工作,當你嘗試收集結果時,他們還沒有在頁面上。 Selenium,AFAI沒有明確的方式來確定這樣的腳本是否已經完成執行。

正如我認爲,這將是更可靠的做

br.get("http://www.google.com/search?q=python") 
results = br.find_elements_by_class_name('g') 
+2

+1。還有'WebDriverWait'方法,您可以在其中準確指定要等待的元素。在這種情況下,div ID'center_col'包含結果,並用'_ = WebDriverWait(br,10).until(lambda x:br.find_element_by_id('center_col'))替換睡眠' selenium.webdriver.support.ui導入WebDriverWait')。無論如何,我投票支持你! – RocketDonkey

+0

謝謝工作完美。 – RanRag

+0

我同意RocketDonkey。我認爲增加一個time.sleep就是答案,這是一個糟糕的主意。請使用WebDriverWait,或編寫自己的輪詢ajax方法。不應該有靜態睡眠可以解決您的問題 –