Python Selenium错误:在缓存中找不到元素-可能页面在查找后已更改

Python Selenium错误:在缓存中找不到元素-可能页面在查找后已更改,python,selenium,web-scraping,Python,Selenium,Web Scraping,我正在提取url每页上的第一个“名称”字段: for循环运行一次并引发错误: File "srl.py", line 40, in <module> print state.text File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 66, in text return self._execute(Command.GET_ELEMENT

我正在提取url每页上的第一个“名称”字段:

for循环运行一次并引发错误:

File "srl.py", line 40, in <module>
    print state.text
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 66, in text
    return self._execute(Command.GET_ELEMENT_TEXT)['value']
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 404, in _execute
    return self._parent.execute(command, params)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 195, in execute
    self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 170, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up
Stacktrace:
    at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:8981)
    at Utils.getElementAt (file:///tmp/tmpPEHToH/extensions/fxdriver@googlecode.com/components/command-processor.js:8574)
    at WebElement.getElementText (file:///tmp/tmpPEHToH/extensions/fxdriver@googlecode.com/components/command-processor.js:11722)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpPEHToH/extensions/fxdriver@googlecode.com/components/command-processor.js:12282)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///tmp/tmpPEHToH/extensions/fxdriver@googlecode.com/components/command-processor.js:603)

在运行此脚本时,只运行一次的for循环不会打印最后一个“state.text”,即使我没有做任何更改。

考虑到异常的文本,会发生以下情况:每次按下Go按钮,页面都会刷新自己加载新数据,不是通过AJAX,而是通过实际刷新-这很重要,因此,Selenium会检测页面状态的变化,并在您尝试从以前的状态访问元素时引发异常。我建议使用以下算法来解决您的问题:

current_position = 1

while True:
    try:
        state_elem = driver.find_element_by_id("state")
        all_states = state_elem.find_elements_by_tag_name("option")
        state = all_states[current_position]
        print "start ",
        print state.text

        print "state value is %s" % state.get_attribute("value")
        state.click()
        driver.implicitly_wait(2)

        driver.find_element_by_name("go").click()

        name = driver.find_element_by_xpath("//div[span='Name'][1]/span/following-sibling::span[2]")
        print name.text
        print "end ",
        print state.text
        current_position += 1
    except:
        break

这样,每次在新生成的页面上选择下一个选项时,都不会出现以前出现的异常。

要显示什么?下拉列表中的状态名称..或任何其他?是的状态名称以及我使用xpath提取的第一个“名称”字段@Sarithag尝试使用此xpath获取名字:.//*[@id='qname']。我很容易获取名字。。。那没问题。。我没有得到的是,我的代码没有打印下一个州,即“Assam”@SarithaG,它打印了以下内容:国家价值是印度开始安得拉邦国家价值是安得拉邦AMBICARE诊所和诊断结束回溯最近的电话最后:我投票,因为我原则上相信这是正确的。但是,您是否认为中断属于try:而不是except:?
current_position = 1

while True:
    try:
        state_elem = driver.find_element_by_id("state")
        all_states = state_elem.find_elements_by_tag_name("option")
        state = all_states[current_position]
        print "start ",
        print state.text

        print "state value is %s" % state.get_attribute("value")
        state.click()
        driver.implicitly_wait(2)

        driver.find_element_by_name("go").click()

        name = driver.find_element_by_xpath("//div[span='Name'][1]/span/following-sibling::span[2]")
        print name.text
        print "end ",
        print state.text
        current_position += 1
    except:
        break