Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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
Python 具有相同ID的Xpath-如何获取第二个元素?_Python_Selenium_Selenium Webdriver_Xpath_Webdriverwait - Fatal编程技术网

Python 具有相同ID的Xpath-如何获取第二个元素?

Python 具有相同ID的Xpath-如何获取第二个元素?,python,selenium,selenium-webdriver,xpath,webdriverwait,Python,Selenium,Selenium Webdriver,Xpath,Webdriverwait,我在从页面获取值时遇到了一个问题,在我操作的框架中有3个xpath具有相同的ID,我无法使用更精确的xpath,或者不知道如何操作 我已经尝试在xpath之后添加[0]或[1],但结果不是这样: Temp_Pass=WebDriverWait(driver,9000)。直到(EC.presence_元素位于((By.XPATH,//td[@id='content-main-rowOdd'])[0]))为止。text 及 Temp_Pass=WebDriverWait(driver,9000)。

我在从页面获取值时遇到了一个问题,在我操作的框架中有3个xpath具有相同的ID,我无法使用更精确的xpath,或者不知道如何操作

我已经尝试在xpath之后添加[0]或[1],但结果不是这样:

Temp_Pass=WebDriverWait(driver,9000)。直到(EC.presence_元素位于((By.XPATH,//td[@id='content-main-rowOdd'])[0]))为止。text

Temp_Pass=WebDriverWait(driver,9000)。直到(EC.presence_元素位于((By.XPATH,//td[@id='content-main-rowOdd']/以下同级::tr[1])。text

但这两种方法都不起作用

以下是网站框架中的代码:

  <tbody>
      <tr>
        <td id="content-main-rowOdd">For user zxc the fallowing pass     has been generated:</td>
      </tr>
      <tr>
      <td id="content-main-rowOdd">
       abcd
         <div></div>
      </td>
      </tr>
      <tr>
      <td id="content-main-rowOdd">
         <input id="content-main-button-default" type="submit" onlick="window.close()" name="command-cancel" value="cancel">
         <input id="content-main-button-default" type="submit" name="command-next" value="Next">
      </td>
      </tr>
      .....
      </tbody>

对于用户zxc,已生成休闲通行证:
abcd
.....
我想要的是“abcd” 但我只能抓取:“对于用户zxc,已生成以下过程:”

  • 由于
    元素位于单独的
    元素中,如果所需的元素位于第二个
    元素中,则可以尝试以下操作:
    “//table/tr[2]/td[@id='content-main-rowOdd']”

    代码:

    Temp_Pass = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//table/tr[2]/td[@id='content-main-rowOdd']"))).text
    
  • 使用
    find\u elements\u by
    获取所有元素,然后从第二个元素获取文本

    list = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.XPATH,"//td[@id='content-main-rowOdd']")));
    Temp_Pass = list[1].text
    
  • 由于
    元素位于单独的
    元素中,如果所需的元素位于第二个
    元素中,则可以尝试以下操作:
    “//table/tr[2]/td[@id='content-main-rowOdd']”

    代码:

    Temp_Pass = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, "//table/tr[2]/td[@id='content-main-rowOdd']"))).text
    
  • 使用
    find\u elements\u by
    获取所有元素,然后从第二个元素获取文本

    list = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.XPATH,"//td[@id='content-main-rowOdd']")));
    Temp_Pass = list[1].text
    

  • 下面是获取第二个元素所需的XPath。您可以在XPath选择器上使用
    [2]
    ,但使用起来有点奇怪

    Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "(//td[@id='content-main-rowOdd'])[2]"))).text
    

    请注意,XPath包含括号,然后我们选择从该XPath返回的第二项。

    这里是获取第二个元素所需的XPath。您可以在XPath选择器上使用
    [2]
    ,但使用起来有点奇怪

    Temp_Pass = WebDriverWait(driver,9000).until(EC.presence_of_element_located((By.XPATH, "(//td[@id='content-main-rowOdd'])[2]"))).text
    

    请注意,XPath包含括号,然后我们选择从该XPath返回的第二项。

    您就快到了。由于文本abcd与用户zxc的文本相关联,因此生成了休耕过程:,提取文本abcd的一种简单方法是将带有文本的节点标识为用户。。。然后为位于()的元素的可见性标识所需的节点,然后提取所需的文本,如下所示:

    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd' and contains(., 'generated')]//following::tr[1]/td[@id='content-main-rowOdd']"))).get_attribute("innerHTML"))
    
    注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    你就快到了。由于文本abcd与用户zxc的文本相关联,因此生成了休耕过程:,提取文本abcd的一种简单方法是将带有文本的节点标识为用户。。。然后为位于()的元素的可见性标识所需的节点,然后提取所需的文本,如下所示:

    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//td[@id='content-main-rowOdd' and contains(., 'generated')]//following::tr[1]/td[@id='content-main-rowOdd']"))).get_attribute("innerHTML"))
    
    注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    我不知道为什么网站上的代码没有发布在我的帖子里。。。对于用户zxc,已生成休耕过程:abcd。。。。。把它们全部放到python的列表中,然后从列表中获取
    所有项目[1]
    我不知道为什么网站上的代码没有发布在我的帖子中。。。对于用户zxc,已生成休耕过程:abcd。。。。。将它们全部放到python的列表中,然后从列表中获取所有项目[1]