Selenium对元素进行迭代,如果元素满足特定条件,则单击该元素



我试图创建一个web scraper,但遇到了问题。我正在尝试迭代小部件左侧的元素,如果名称以"a"开头,我想单击减号并将其移动到右侧。我设法找到了所有的元素,然而,一旦执行了向右移动的元素,就在那个循环之后,我得到了以下错误。

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

(会话信息:chrome=80.0.3987.163(

JS小部件。

您需要重构代码。你的代码模式可能是这样的(当然有不同的id-s,但由于你没有包括你的代码或页面源代码,这是我能提供的最好的(:

container = driver.find_elements_by_xpath('//*[@class="window_of_elements"]')
elements = container.find_elements_by_xpath('//*[@class="my_selected_class"]')
for e in elements:
minus_part = e.find_element_by_xpath('//span[@class="remove"]')
minus_part.click()

单击minus_part时,elements的容器可能会被重新渲染/重新加载,并且之前找到的所有元素都会变成stale

要绕过这一点,你应该尝试一种不同的方法:

container = driver.find_elements_by_xpath('//*[@class="window_of_elements"]')
to_be_removed_count = len(container.find_elements_by_xpath('//*[@class="my_selected_class"]'))
for _ in range(to_be_removed_count):
target_element = container.find_element_by_xpath('//*[@class="window_of_elements"]//*[@class="my_selected_class"]')
minus_part = target_element.find_element_by_xpath('//span[@class="remove"]')
minus_part.click()

所以基本上你应该:

  • 找出要点击的元素数量
  • 在for循环中逐个查找并单击它们

相关内容

  • 没有找到相关文章

最新更新