当前位置: 首页 > 知识库问答 >
问题:

在python selenium中使用父/同级查找元素

吴西岭
2023-03-14

我正在使用python中的selenium来清理一个使用angular js设计的web页面,因此没有健壮的元素标识符,如id等。我完全依赖于css选择器(是动态的)和XPath。

我有以下代码-

<div class="dpm-form-row ng-star-inserted">
<dpm-input-number class="flex-6">
<dpm-input-label>
<label>Fixed Rate</label>
</dpm-input-label>
<dpm-input-number-bare>
<input size="1" type="text" placeholder="" class="ng-pristine ng-valid ng-touched">
</dpm-input-number-bare>
</dpm-input-number>
<div class="flex-6">
</div>
</div>

它基本上是一个名为“固定比率”的标签,后面跟着一个输入文本框。 我正想抢的就是那个盒子。

我已经设法使用以下代码获取标签,我在使用父/兄弟逻辑获取框时遇到了麻烦-

element = driver.find_element_by_xpath('//*[contains(text(),"Fixed Rate")]')

共有1个答案

方宁
2023-03-14

从你前面的问题转贴。 原始解决方案:

//input[@class="ng-pristine ng-valid ng-touched"][../preceding-sibling::dpm-input-label[1]/label[.="Fixed Rate"]]

3使用follow-sibling轴的XPath:

//dpm-input-label[label[.="Fixed Rate"]]/following-sibling::dpm-input-number-bare[1]/input
//dpm-input-label[label[contains(.,"Fixed Rate")]]/following-sibling::dpm-input-number-bare[1]/input
//dpm-input-label[contains(.,"Fixed Rate")]/following-sibling::dpm-input-number-bare[1]/input

3 XPath使用preceding-sibling轴和多个包含输入元素的:

//input[contains(@class,"ng-pristine") and contains(@class,"ng-valid") and contains(@class,"ng-touched")][../preceding-sibling::dpm-input-label[1]/label[.="Fixed Rate"]]
//input[contains(@class,"ng-pristine") and contains(@class,"ng-valid") and contains(@class,"ng-touched")][../preceding-sibling::dpm-input-label[1]/label[contains(.,"Fixed Rate")]]
//input[contains(@class,"ng-pristine") and contains(@class,"ng-valid") and contains(@class,"ng-touched")][../preceding-sibling::dpm-input-label[1][contains(.,"Fixed Rate")]]

4使用轴的XPath:

//input[@class="ng-pristine ng-valid ng-touched"][preceding::label[1][.="Fixed Rate"]]
//input[@class="ng-pristine ng-valid ng-touched"][preceding::label[1][contains(.,"Fixed Rate")]]
//input[contains(@class,"ng-pristine") and contains(@class,"ng-valid") and contains(@class,"ng-touched")][preceding::label[1][.="Fixed Rate"]]
//input[contains(@class,"ng-pristine") and contains(@class,"ng-valid") and contains(@class,"ng-touched")][preceding::label[1][contains(.,"Fixed Rate")]]
 类似资料:
  • 最有效的方法是只使用纯javascript查找特定父元素的子元素(带有类或ID)。没有jQuery或其他框架。 在这种情况下,我需要找到parent的child1或child2,假设DOM树中可以有多个child1或child2类元素。我只想要父母的元素

  • 问题内容: 我正在尝试使用pythonselenium登录到网页。我找到了一个元素并将其启用,但是当我尝试向其发送send_keys()时出现错误。错误输出的主要内容(我认为)是 我的代码是 输出是 那么,我该怎么办? 问题答案: 为了使用户名字段可见,您需要将光标移动到登录链接:

  • 我正在为以下代码编写selenium脚本。 这些是如下所示的复选框。复选框的数量将根据数据库值进行更改。 在我的代码中,我首先检查是否选中了“Frau”复选框。所以我试着按照这个片段。 但是当我试图执行这个脚本时<代码>WebElement div=父级。findElement(By.xpath(“前面的同级:::div”)给我第一个div标记,而不是前一个。我想要一个兄弟姐妹。

  • 我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?

  • 我正在尝试将我的selenium测试转换为使用页面对象模型(以及扩展为@FindBy)。我有几个这样的对象定义: 将父对象转换为使用FindBy很容易: 基本上,如果可能的话,我想这样做(我知道这不是真正的代码,这只是一个伪示例: 但是,有没有一种方法可以使用FindBy在父元素中定位子元素呢 。我需要这样做,因为我的目标是页面上的特定元素,这些元素可能与页面上的其他元素共享相同的名称或类名。谢谢

  • 我需要在一个xml文件中找到一个子节点,它位于递归父子属性中。下面是一个xml示例: //NodeB[不(nodeA)] 但是我需要选择第一个(并且只选择第一个)组,而没有子组,实际上是上面示例中的前三次出现。

  • 我正在使用Selenium来自动化一些测试。我对硒有点陌生。因此,我试图验证一个表单。有些字段带有星号,表示必填字段。我目前正在遍历所有可见字段,然后检查前面的元素是否有标签。我还需要检查标签是否有星级。我不太擅长这个xpath的东西,所以任何帮助都将不胜感激。 还有我的HTML结构,其中一些结构有星形类,而另一些没有:

  • 问题内容: 我有这个架构 样本数据 SQL Fiddle演示。我已经插入了一些示例数据。 查兰芝 我需要找到唱片标题的所有父母。如何仅通过一个查询就可以获取所有父母? 我的意思是我需要这个结果: 期望的输出 假设我想使用其所有父项来获取条目,并且要使用where条件,那么它应该获取上述记录。 问题答案: 演示版