Python 使用 Selenium - 由于该元素在网站上的位置随机化,因此无法找到并单击该特定元素

Python with Selenium - Cannot find and click this specific element due to randomization of it's location on the site

我一直在创建一个使用 python 2.7 和 selenium 玩在线游戏的工具,并且我非常坚持我需要 select.

的一个特定元素

UI 看起来如下:

1   2   3
a   d   g
b   e   h
c   f   i

数字一、二和三代表下拉菜单,单击该菜单会打开字母。每个选项代表不同的结果。问题是,在每场比赛开始时,数字和字母的位置都是随机的。在代码中,每个按钮的 css select 或标记为例如“#action-1 > button:nth-child(1)”,如 "first button" 中一样,但是"first button" 每场比赛都会有所不同。

我尝试通过 link 文本、xpath 和 css select 查找,但没有成功。

如果有帮助,请按 "copy outer html" 给出:

<button class="ng-binding" ng-click="subBtn($event)" ng-class="{disabled : !state.chapterStart || state.btns.indexOf(btn.action) != -1}" ng-disabled="!state.chapterStart || state.btns.indexOf(btn.action) != -1">Wait and See What They Do</button>

它的 "Wait and See What They Do" 部分是按钮显示的内容以及您知道要单击什么的方式,但我似乎无法通过它找到该元素。

在 //*[@id="action-1"]/button 中复制 xpath 的结果,这也不是很有帮助,因为告诉它点击就像说 "click the button that is in the first position",它每次都在变化。我添加了很长的 time.sleep() 命令来测试,页面肯定一直在加载,所以这不是问题。

无论如何,我已经尝试解决这个问题太久了,但它让我感到难过。如果你们能提供任何意见,我将不胜感激。谢谢!

如果您希望通过元素包含的文本来定位元素,您可以使用 XPath。您说您尝试过 XPath 但没有给出具体细节。你试过下面的吗?根据您提供的 HTML 它应该可以工作。

//button[text()='Wait and See What They Do']

要读取此 XPath... 找到任何后代 //,它是一个 BUTTON 标签,具有属性 [],其中元素中包含的文本等于搜索字符串,text()=''.

下面可能是另一个示例,它是查找按钮的另一种方法。这种方式的问题是页面上可能有很多按钮 class 所以它可能不够具体。

//button[@class='ng-binding']

我发现(其他人也发现)XPath 通常比其他定位方法慢。正因为如此,我通常更喜欢By.Id,如果可用,然后是By.CssSelector。它们都比 XPath 快得多。我保存 XPath 用于查找元素中的文本或查找相关元素(CSS 可以做到这一点,但远没有 XPath 强大)。

XPath Examples