在硒chromedriver python中找不到带有text()的按钮

时间:2019-07-19 21:25:01

标签: python-3.x web-scraping selenium-chromedriver

我无法单击该按钮,但是我尝试的每种方法都失败了。 这是单击chrome中的“检查”的结果:

<button class="rg-run-report-button md-raised md-primary md-ink-ripple md-button" type="submit" ng-transclude="" ng-click="reportCtrl.generateReport()" ng-disabled="!(reportCtrl.isGenerateButtonEnabled())">
        RUN REPORT
      <div class="md-ripple-container" style=""></div></button>

我要离开这个,并建立一个像这样的Xpath:

driver.find_element_by_xpath("//button[contains(text(), 'RUN REPORT')]").click()

文本“ RUN REPORT”周围有很多尴尬的空格。我不确定该怎么做,因为我尝试通过按钮的属性来定位该按钮。

2 个答案:

答案 0 :(得分:1)

请尝试以下定位器之一- 以下定位符将删除文本周围的空格并仅查找文本

//button[normalize-space(text()='RUN REPORT')]

或者从html结构中,对于使用ng标签以angular开发的应用来说,您的应用似乎是有角度的

//button[@ng-click="reportCtrl.generateReport()"]

答案 1 :(得分:0)

感谢@Dev:

找到我需要单击的元素的问题不是来自错误的Xpath定位器,而是不考虑切换iframe。我正在查看的源不直接包含该元素,但是确实有一个iframe(总共两个)。

当我单击按钮上的“检查元素”时,它没有直接向我显示组件。因为这些组件嵌套在iframe中。

我做到了:

driver.switch_to.frame('name of iframe')

之后

driver.find_element_by_xpath("//button[@ng-click='reportCtrl.generateReport()']")