Selenium - 元素不再附加到DOM - Python

时间:2012-10-11 15:53:12

标签: selenium python-2.7 selenium-webdriver

我正在编写代码来使用Selenium浏览网站(在测试我们的网站之前进行实践)。我正在尝试在3个单独的下拉菜单中迭代值,并检索包含产品数据的结束页。

到目前为止,我能够打印第一个菜单中的数据和第二个菜单中的相关数据,但仅限于第一个菜单创建的列表中的第一个元素......这可能很难理解,所以考虑这个例子:

DropdownA包含值:

一个 乙 C d

选择“A”时,DropdownB将填充值:

1 2 3

我的目标是覆盖整个树并返回值:

A - 1,2,3

B - 2,3,4

C - 3,4,5

我的剧本在回归后遭到炸弹袭击:

A - 1,2,3

以下是我的代码示例:

from pyvirtualdisplay import Display
from selenium import webdriver
import time

display = Display(visible=0, size=(1024, 768))
display.start()
driver = webdriver.Firefox()
url = 'http://www.website.com'

driver.get(url)
driver.find_element_by_id('ctl00_ContentPlaceHolder1_pc_selector_selMake').click()
make_list = driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selMake option')
for raw_make in make_list:
    if 'Select' in raw_make.text:
        continue
    make = raw_make.text
    print make
    raw_make.click()
    time.sleep(1)

    model_list = driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selModel option')
    for raw_model in model_list:
        if 'Select' in raw_model.text:
            continue
        model = raw_model.text

        print ' ', model

driver.close()
display.stop()

确切的错误是:selenium.common.exceptions.StaleElementReferenceException: Message: u'Element is no longer attached to the DOM'

我对Selenium很新,所以如果这是一个愚蠢的问题,请原谅我。我花了更多的时间来承认尝试任何事情和想到的一切,或者我在网上阅读并且没有任何帮助(部分原因是我遇到的大多数例子都是用Java编写的,而且我'我不是一个Java家伙......)。

非常感谢任何帮助,建议,解决方案,资源等。

提前致谢!

1 个答案:

答案 0 :(得分:3)

最终,它听起来像你正在迭代的DOM元素不再存在。你可能会问,怎么会发生这种情况?我相信问题出现在以下问题中:您通过调用以下方式获取下拉列表中的所有标记:

driver.find_elements_by_css_selector('#ctl00_ContentPlaceHolder1_pc_selector_selMake option')

然后,您将迭代每个标记并单击每个标记。我最好的猜测是每次点击时都可以重新生成下拉列表,从而使您正在迭代的对象无效。因此成功的第一次迭代,但此后的每次迭代都呈现不成功。

希望这有帮助!