StaleElementReferenceException python正在解决问题



我正在使用chrome驱动程序来提取数据。

有一点我很纠结:我需要对整个列表(所有元素(进行迭代。第一次它工作,我可以下载一个文件。

对于第二次迭代,它显示了一个错误StaleElementReferenceException,其中一个元素没有附加到页面文档。

我应该如何改变我的循环来克服这个错误?

你可以尝试这样的东西:

options = browser.find_elements_by_xpath(
    '/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option')
for option in options:
    result = option.click()
    ...

请参阅文档:https://selenium-python.readthedocs.io/locating-elements.html#locating-通过xpath

问题可能是点击选项会出现更多选项。你可以做这样的事情——制作一个生成器来生成以前没有找到的所有元素,直到没有剩下的元素了。(WebElements似乎不可哈希,因此不能直接存储在一个集合中,但可以通过其id属性唯一标识,但当向页面添加新元素时,您可能需要检查这是否有效。(

def all_elements_by_xpath(xpath):
    found = set()
    while True:
        found_new_ones = False
        for element in browser.find_elements_by_xpath(xpath):
            if element.id not in found:
                found_new_ones = True
                found.add(element.id)
                yield element
         if not found_any:
             return
for element in all_elements_by_xpath('/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option'):
    element.click()

请注意,这将首先单击页面上最初出现的所有元素(按它们的出现顺序(,然后才开始单击单击后出现的新元素。如果你想要一个不同的顺序,或者元素有时会消失,你可以改变它,每次都再次搜索元素,比如:

def all_elements_by_xpath(xpath):
    found = set()
    while True:
        for el in browser.find_elements_by_xpath(xpath):
            if el.id not in found:
                found.add(element.id)
                yield element
                break
        else:
            return

相关内容

  • 没有找到相关文章

最新更新