我正在关注this video以熟悉硒。我的代码是
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"
所以,任何想法为什么我没有使用selenium + python获得任何结果。
答案 0 :(得分:3)
在time.sleep(3)
之后添加q.send_keys(Keys.RETURN)
似乎可以解决问题。这是因为当您按下Keys.RETURN时,ajax开始工作,当您尝试收集结果时,它们还没有在页面上。 Selenium,AFAI无法确定这样的脚本是否已经完成执行。
我认为,做
会更可靠br.get("http://www.google.com/search?q=python")
results = br.find_elements_by_class_name('g')