使用Python中的Selenium通过javascript添加内容来搜索网站

时间:2014-04-28 16:50:17

标签: javascript python selenium web-scraping phantomjs

我正在尝试使用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

0 个答案:

没有答案