Python Selenium:无法在页面上找到元素
Python Selenium: Can't find an element on page
我对在 selenium 中使用 python 还很陌生。
我一直在尝试 select 我网页上的按钮。这是检查按钮元素后出现的 HTML 片段:
<a class="btn col-xs-3 nav-btns" ui-sref="salt.dashboard.reports.minions" href="/dashboard/reports/minions/">
<span class="ssIcons-icon_reports salt-icon-3x ng-scope active" bs-tooltip="" data-title="Reports" container="body" placement="bottom" animation="none" data-trigger="hover" ng-class="{'active': state.current.name =='salt.dashboard.reports' … || state.current.name =='salt.dashboard.reports.minions'}">
::before
</span>
</a>
能想到的我都试过了。以下是我尝试过的一些方法:
element = driver.find_element_by_class_name("btncol-xs-3")
element = driver.find_element_by_name("Reports")
element = driver.find_element_by_id("Reports")
我不断收到的错误是:
selenium.common.exceptions.NoSuchElementException: Message: Unable to
locate element: {"method":"class
name","selector":"salt.dashboard.reports"} Stacktrace:
at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver-component.js:10299)
at FirefoxDriver.prototype.findElement (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver-component.js:10308)
at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12282)
at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12287)
at DelayedCommand.prototype.execute/< (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12229)
root@chris-salt:/home/chris/Documents/projects/python-selenium#
克里斯,
您粘贴的跨度没有名为 id 的属性。
此外,您的 class 选择器太宽,我建议在 dom 结构之后使用更明确的路径。请记住,可能有多个元素具有 class 名称。
此外,您正试图通过该元素中没有的属性名称进行查找。
最后,您似乎正在使用 angular。您要查找的输入是否是使用 javascript 动态创建的?
另外,你为什么要使用 root 来做这个测试?
在执行断言之前,您能否存储结果 html 并手动检查您是否确实拥有该元素?
通过data-title
查找元素:
driver.find_element_by_css_selector("span[data-title=Reports]")
或者,如果您需要访问 a
标签:
driver.find_element_by_xpath("//a[span/@data-title = 'Reports']")
我对在 selenium 中使用 python 还很陌生。
我一直在尝试 select 我网页上的按钮。这是检查按钮元素后出现的 HTML 片段:
<a class="btn col-xs-3 nav-btns" ui-sref="salt.dashboard.reports.minions" href="/dashboard/reports/minions/">
<span class="ssIcons-icon_reports salt-icon-3x ng-scope active" bs-tooltip="" data-title="Reports" container="body" placement="bottom" animation="none" data-trigger="hover" ng-class="{'active': state.current.name =='salt.dashboard.reports' … || state.current.name =='salt.dashboard.reports.minions'}">
::before
</span>
</a>
能想到的我都试过了。以下是我尝试过的一些方法:
element = driver.find_element_by_class_name("btncol-xs-3")
element = driver.find_element_by_name("Reports")
element = driver.find_element_by_id("Reports")
我不断收到的错误是:
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"class name","selector":"salt.dashboard.reports"} Stacktrace: at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver-component.js:10299) at FirefoxDriver.prototype.findElement (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/driver-component.js:10308) at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12282) at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12287) at DelayedCommand.prototype.execute/< (file:///tmp/tmpoRPJXA/extensions/fxdriver@googlecode.com/components/command-processor.js:12229) root@chris-salt:/home/chris/Documents/projects/python-selenium#
克里斯,
您粘贴的跨度没有名为 id 的属性。
此外,您的 class 选择器太宽,我建议在 dom 结构之后使用更明确的路径。请记住,可能有多个元素具有 class 名称。
此外,您正试图通过该元素中没有的属性名称进行查找。
最后,您似乎正在使用 angular。您要查找的输入是否是使用 javascript 动态创建的?
另外,你为什么要使用 root 来做这个测试?
在执行断言之前,您能否存储结果 html 并手动检查您是否确实拥有该元素?
通过data-title
查找元素:
driver.find_element_by_css_selector("span[data-title=Reports]")
或者,如果您需要访问 a
标签:
driver.find_element_by_xpath("//a[span/@data-title = 'Reports']")