0

私はセレンに慣れるためにこのビデオをフォローしています。私のコードは

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">​…​&lt;/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"

だから、なぜ私はセレン+パイソンで何の結果も得られないのですか?

4

1 に答える 1

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')
于 2012-11-12T14:44:17.980 に答える