我正在尝试使用Selenium和python中的phantomjs从网站上抓取数据。但是,这个网站正在通过javascript添加我感兴趣的数据。有没有办法让Selnium在返回之前等待数据?到目前为止,我们已经尝试过:
import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
phantomjs = '/usr/local/bin/phantomjs'
url = '[redacted]'
with contextlib.closing(webdriver.PhantomJS(phantomjs)) as driver:
driver.get(url)
wait = ui.WebDriverWait(driver, 10)
wait.until(lambda driver: driver.execute_script("return document.getElementById(\"myID\").innerText").startswith('[redacted]'))
driver.execute_script("return document.getElementById(\"myID\").innerText")
很遗憾,此代码会引发selenium.common.exceptions.TimeoutException: Message: None
,因为我们获得的id
内容不会发生变化。
我们在virtualenv和selenium 2.41.0中使用PhantomJS 1.9.7,python 2.7.5。这是正确的方式,还是我们错过了什么。有没有人有更好的方法来做到这一点?
提前致谢。
修改
在@ExperimentsWithCode评论之后,我们尝试循环直到加载内容:
with contextlib.closing(webdriver.PhantomJS(phantomjs)) as driver:
driver.get(url)
wait = ui.WebDriverWait(driver, 10)
found = False
while not found:
try:
wait.until(lambda driver: driver.execute_script("return document.getElementById(\"myID\").innerText").startswith('[redacted]'))
driver.execute_script("return document.getElementById(\"myID\").innerText")
found = True
except:
print "Not found"
pass