过时元素:遍历webelement列表python



我第一次使用硒来获取一些关于我和朋友玩的梦幻足球游戏的信息(我们有比赛(。我在遍历一系列网络元素时遇到了一些问题。显然它们已经过时了。以下是一些代码和详细信息:

我能够自己进入比赛页面。这个页面有比赛中每支球队的卡片,它们看起来像这个

<span class="cartola-card-thin__nome__time">TEAM1</span>

单击后,这些卡片将指向该团队的页面。这个页面包含一个下拉菜单,看起来像这个

<span class="cartola-dropdown-bg__botao cartola-dropdown-bg-botao-rodada-id cartola-dropdown-bg__botao--aberto" ng-class="'cartola-dropdown-bg-botao-' + name"></span>

这个菜单为每一轮比赛都包含一个div。看起来像这个

<div ng-if="!hasDescription" class="cartola-dropdown-bg__selecao" ng-bind="item.label">rodada 25</div>

单击时,每个div加载特定团队的队形以及该回合中的点数。页面上显示的点如下:

<div class="cartola-time-adv__pontuacao pont-positiva" ng-class="{'pont-positiva': ctrl.timeService.dadosTime.pontos > 0,
'pont-negativa': ctrl.timeService.dadosTime.pontos < 0}" ng-bind="ctrl.timeService.dadosTime.pontos != null ? ctrl.timeService.dadosTime.pontos : ''">78.17</div>

我的目标是:我想在每一轮比赛中把每支球队的分数收集在一个dict['round']=分数中。

我已经尝试过了:我试图通过来保持球队的名单

teams = browser.find_elements_by_class_name("cartola-card-thin__nome__time")

然后,对于团队中的每一个团队,我都会点击它。当在那一页上,我会发现每一轮都像这个

rounds = browser.find_elements_by_class_name("cartola-dropdown-bg__selecao")

然后,在每一轮中,我都会点击它并获得该轮的分数。

问题是:我在团队和轮次中迭代的那些循环不起作用,因为很明显,在循环内的整个过程(点击等(之后,这些网络元素变得过时了

我该如何处理这个问题?

在运行时重建角度下拉元素。在下拉菜单被折叠后,以前找到的下拉菜单项不再是DOM的元素。当再次展开下拉菜单时,它会再次添加到DOM中,但它与WebDriver的元素不同(即使可以使用相同的定位器找到它(。

所以,你遵循这个逻辑:

  1. 展开下拉菜单
  2. 获取下拉元素->
teams = browser.find_elements_by_class_name("cartola-card-thin__nome__time")
  1. 为每个团队做点什么->我想,在这里,下降已经崩溃了。如此找到的WebElement不再在DOM中->陈旧元素异常

你要做什么?

teamsCount = len(teams);
teamIndexes = range(teamsCount)
for(i in temIndexes)
team = driver.find_element(locator_that_usesTeamIndex)

最新更新