首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python selenium中使用父项/兄弟项查找元素

在python selenium中使用父项/兄弟项查找元素
EN

Stack Overflow用户
提问于 2020-07-25 22:16:18
回答 1查看 138关注 0票数 0

我使用python中的selenium来抓取一个用angular js设计的网页,因此对于id等元素没有健壮的标识符。我完全依赖于CSS选择器(这是动态的)和xpath。

我有以下代码-

代码语言:javascript
复制
<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>

它基本上是一个名为"Fixed Rate“的标签,后面跟着一个输入文本框。这就是我想要拿的那个盒子。

我已经设法使用下面的代码来获取标签,我在使用父/兄弟逻辑来获取盒子时遇到了问题-

代码语言:javascript
复制
element = driver.find_element_by_xpath('//*[contains(text(),"Fixed Rate")]')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-25 22:23:39

重新发布您的preceding问题。原始解决方案:

代码语言:javascript
复制
//input[@class="ng-pristine ng-valid ng-touched"][../preceding-sibling::dpm-input-label[1]/label[.="Fixed Rate"]]

3使用following-sibling轴的XPath:

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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使用preceding轴的XPath:

代码语言:javascript
复制
//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")]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63089418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档