Selenium通过Id获取元素,该Id位于另一个不带Xpath的元素中
我正在从事一个小型自动化项目。Selenium通过Id获取元素,该Id位于另一个不带Xpath的元素中,selenium,webdriver,element,getelementbyid,getelementsbyclassname,Selenium,Webdriver,Element,Getelementbyid,Getelementsbyclassname,我正在从事一个小型自动化项目。 我正在开发的网站有一个奇怪的设计。它有多个具有相同id的元素。并且网站按预期工作(多个相同id不会导致任何问题) 我需要访问所有这些元素,但我不能,因为它们的id都是相同的。 我能接触到所有人的唯一方法是使用“完整xpath”,但这个解决方案不会是一个长期的解决方案,因为只向网站添加一个div会导致完整xpath无法正常工作 我想用外部元素接触元素,如: elements = driver.find_elements_by_class_name("cla
我正在开发的网站有一个奇怪的设计。它有多个具有相同id的元素。并且网站按预期工作(多个相同id不会导致任何问题)
我需要访问所有这些元素,但我不能,因为它们的id都是相同的。
我能接触到所有人的唯一方法是使用“完整xpath”,但这个解决方案不会是一个长期的解决方案,因为只向网站添加一个div会导致完整xpath无法正常工作 我想用外部元素接触元素,如:
elements = driver.find_elements_by_class_name("classs")
for element in elements:
element.find_element_by_id("idOfElement")
#OR
element.find_element_by_class_name("classOfTheElement"
这不是一个有效的代码,我只是想让你明白我想要什么。
有办法做到这一点吗
编辑:
该网站有一系列元素,用于上传对象的变体,这些变体中的id是相同的。我需要找到这些id元素并发送一些密钥。下面是一个类似的html树:
<div class="generalClass">
<div class="someElement">
<input id="idOfInput>
</div>
<div class="someElement">
<input id="idOfInput>
</div>
</div>
您不必使用绝对XPath,这显然可以通过相对XPath实现。
根据您的示例,您可以执行以下操作:
outer_element = driver.find_element_by_class_name("classs")
desired_elements = driver.find_elements_by_xpath(".//input[@id='idOfInput']")
或者更简单地使用单个相对XPath:
desired_elements = driver.find_elements_by_xpath('//div[@class="classs"]//input[@id="idOfInput"]')
您不必使用绝对XPath,这显然可以通过相对XPath实现。
根据您的示例,您可以执行以下操作:
outer_element = driver.find_element_by_class_name("classs")
desired_elements = driver.find_elements_by_xpath(".//input[@id='idOfInput']")
或者更简单地使用单个相对XPath:
desired_elements = driver.find_elements_by_xpath('//div[@class="classs"]//input[@id="idOfInput"]')
有时
id
在元素中不可用,单个类也与其他元素共享,因此xpath
是一个更好的选择,您可以使用inspect in developers工具找到元素的xpath,如果您自己编写路径,您可以验证它是否指向正确的元素,下面是如何操作的
ctrl
+
F
Enter
它将突出显示所选元素。有时
id
在元素中不可用,单个类也与其他元素共享,因此xpath
是更好的选择,您可以使用inspect in developers工具找到元素的xpath,如果您自己编写路径,您可以验证它是否指向正确的元素,下面是如何操作的
ctrl
+
F
Enter
它将突出显示所选元素。您可以共享该页面的url并说明您到底在寻找哪些元素吗?@Prophet该网站需要注册,需要从另一个网站获取API,这意味着注册很困难。我编辑了一个与我的案例类似的示例html部分。你能分享该页面的url并提及你到底在寻找什么元素吗?@Prophet该网站需要注册,需要另一个网站的API,这意味着很难注册。我编辑了一个与我的案例类似的html示例部分。我无法理解外部元素和所需元素之间的关系,它们是如何连接的?但是单一的相对路径解决了这个问题,实际上是完全一样的。在第一种方法中,我定位外部div元素,然后在其内部/下方搜索。这就是
的目的,比如说“从这个节点查找使用以下定位器定位的元素”。第二个XPath执行相同的操作:查找匹配的元素//div[@class=“classs”]
,并在其中查找由//input[@id=“idOfInput”]
定位的元素。我无法理解外部元素和所需元素之间的关系,它们是如何连接的?但是单一的相对路径解决了这个问题,实际上是完全一样的。在第一种方法中,我定位外部div元素,然后在其内部/下方搜索。这就是
的目的,比如说“从这个节点查找使用以下定位器定位的元素”。第二个XPath执行相同的操作:定位匹配的元素//div[@class=“classs”]
,并在其中定位由//input[@id=“idOfInput”]