Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium通过Id获取元素,该Id位于另一个不带Xpath的元素中_Selenium_Webdriver_Element_Getelementbyid_Getelementsbyclassname - Fatal编程技术网

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”]