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

标签 python selenium xpath css-selectors element

我一直在创建一个使用 python 2.7 和 selenium 玩在线游戏的工具,但我非常纠结于我需要选择的一个特定元素。

用户界面如下所示:

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

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

我尝试通过链接文本、xpath 和 css 选择器查找,但没有成功。

如果有帮助,请按“复制外部 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>

其中的“等待并看看他们做了什么”部分是按钮所说的内容,也是您如何知道要单击什么的方式,但我似乎无法通过它找到该元素。

复制 xpath 的结果是//*[@id="action-1"]/button,这又没有什么帮助,因为告诉它单击它就像说“单击第一位置”,而且每次都会改变。我添加了 long time.sleep() 命令来测试,页面肯定会一直加载,所以这不是问题。

无论如何,我已经尝试解决这个问题太久了,它让我难住了。我将非常感谢你们提供的任何意见。谢谢!

最佳答案

如果您希望通过元素包含的文本来定位元素,则可以使用 XPath。您表示您尝试过 XPath,但没有给出具体信息。您尝试过以下方法吗?根据您提供的 HTML,它应该可以工作。

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

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

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

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

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

XPath Examples

关于Python with Selenium - 由于网站上位置的随机化,无法找到并单击此特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38463264/

相关文章:

xslt - 使用 XSLT/XPath 查找元素在其父元素中的位置

python - 如何在 python 中为 xticklabels 添加空间?

python - 使用 re 转换列表 get 元素的最 Pythonic 方法

python - 比较文件时出错: IndexError: list index out of range

java - 如何在不使用 Scenario Outline 的情况下多次运行 Cucumber 场景

python - 使用 python 模块 selenium 在浏览器中输入

python - 我应该使用字典还是系列来保存一堆数据框?

selenium - 自定义/etc/hosts 文件上的 docker-selenium ?

html - 如何通过删除特定文本使用CSS或Xpath获取元素?

c# - XPath:从非根节点选择失败