【发布时间】:2019-05-11 23:57:22
【问题描述】:
我正在使用 Selenium 来自动化流程。到目前为止,我已经成功地在这里找到了我需要的东西,但是找不到找到这个元素的方法:
<a href="javascript:void(0);" onclick="AUL.update('AssignedAssetsUpdateContainer', {}, '13.7.25.0.0.0.0.2.3.0.0.1.2.0.3.0.1.5.3.3.0.1.3.1.5.0.0.1.2.9.5.1.19.0.1.3.1');">
123456
</a>
我首先尝试通过搜索所有标签来查找它:
assetElements = driver.find_elements_by_tag_name("a")
for element in assetElements:
if(element.text == "123456")
element.send_keys(Keys.RETURN)
我选择这条路线显然是因为href标签,但它告诉我它在页面上找不到元素。我认为这是因为页面正在查询数据库并将其填充到容器中。
Butttt.... 完全出于寻找它的动力,我采用了在 https://selenium-python.readthedocs.io/api.html# 上找到的其他 find_elements 选项,并在可用的地方打印了它们的 .text 段,但无法找到它。
欢迎任何想法。这是我第一次在网站上发帖,所以我希望我没有错过任何内容。
这是我试图定位的字段的图像,它是一个搜索响应:
搜索字段容器响应
为了展示,这里是找到其他条目但不是“123456”的 CSS 响应
CSS_Selector 响应
添加了显示搜索元素的结果的屏幕截图
找到元素@JeffC 的屏幕截图
【问题讨论】:
-
您是通过链接文本还是部分链接文本尝试的?您还可以使用像
//a[.='123456']或//a[contains(.,'123456')]这样的XPath。你也可以试试 CSS 选择器,a[onclick*='AssignedAssetsUpdateContainer'] -
我确实尝试了 find_elements_xpath 并且我没有返回任何结果,使用 CSS 选择器将返回列表中的其他条目,除了容器中的“123456”。 @JeffC
-
您尝试添加等待吗?等待页面上最后加载的内容。然后再次尝试定位器。您应该尝试等待页面加载,然后在浏览器控制台中将
$$()用于CSS 选择器,将$x()用于XPath...然后找到它们吗? -
嘿@JeffC 谢谢你的时间和回复,我实际上不熟悉使用浏览器控制台。我刚刚尝试过,“//a[contains(.,'123456')]”确实发现它没有问题。 assetNumberElement = driver.find_element_by_xpath("//a[contains(.,'123456')]") 返回 selenium.common.exceptions.NoSuchElementException: 消息:没有这样的元素:无法找到元素:{"method":"xpath" ,"选择器":"//a[包含(.,'123456')]"}
-
开发工具面板可以使用 F12 打开。从那里,打开控制台并输入命令,例如
$$("a[onclick*='AssignedAssetsUpdateContainer']")作为示例 CSS 选择器或$x("//a[.='123456']")作为示例 XPath。在 Chrome 控制台here 上查看更多帮助,尤其是命令行参考页面。
标签: python selenium selenium-webdriver xpath webdriverwait