【发布时间】:2021-01-02 03:11:09
【问题描述】:
我第一次使用 selenium 来获取一些关于我和朋友一起玩的梦幻足球游戏的信息(我们有一场比赛)。我在遍历 webelements 列表时遇到问题。显然,它们变得陈旧。 下面是一些代码和细节:
我能够自己进入比赛页面。这个页面有比赛中每支球队的卡片,它们看起来像这样
<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'] = points 的每一轮中收集每个团队的分数。
我已经尝试过的事情:我尝试通过这样做将团队保持在列表中
teams = browser.find_elements_by_class_name("cartola-card-thin__nome__time")
然后,对于团队中的每个团队,我都会点击它。 当在那个页面上时,我会发现每一轮都是这样的
rounds = browser.find_elements_by_class_name("cartola-dropdown-bg__selecao")
然后,对于每一轮,我都会点击它并获得该轮的积分。
问题:我在团队和回合中迭代的那些循环不起作用,因为显然这些 web 元素在循环内的整个过程(点击等)之后变得陈旧
我该如何解决这个问题?
【问题讨论】:
-
请提供网站链接。
-
添加完整代码,以便任何人都可以尝试
-
先获取队伍数量。然后使用从 0 到团队数的范围。然后使用索引来查找具有 xpath.browser.find_elements_by_class_name("cartola-card-thin__nome__time")[1].click() 应该为你做的元素。每次进入嵌套循环以单击和离开页面时都是一样的。
标签: python selenium web-scraping web-crawler