【问题标题】:Xpath to extract part of stringXpath提取字符串的一部分
【发布时间】:2016-04-19 07:44:55
【问题描述】:

这是我要从中提取的 HTML。

<input type="hidden" id="continueTo" name="continueTo" value="/oauth2/authz/?response_type=code&client_id=localoauth20&redirect_uri=http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state=72a37ba7-2033-47f4-8e7e-69a207406dfb" />

我需要一个 Xpath 来仅提取状态值,即 72a37ba7-2033-47f4-8e7e-69a207406dfb

【问题讨论】:

  • 发布您迄今为止所做的工作(您当前的代码/正则表达式),以便我们可以更好地帮助您。
  • 只是一个友好的提示,您可能需要阅读此页面:The How-To-Ask Guide,这样您就可以始终确保您的问题易于回答且尽可能清晰。请务必包括您为解决遇到的问题所做的任何努力,以及尝试这些修复时发生的情况。也不要忘记您的显示代码和任何错误消息!

标签: html regex selenium xpath selenium-webdriver


【解决方案1】:

您好,您只能使用 xpath 而不是其子字符串来获取属性的值,但是如果您想获取子字符串,请按以下方式进行操作

String AttributeValue = driver.findElement(By.id("continueTo")).getAttribute("value");
System.out.println("Value of the attribute value is : " + AttributeValue);

    // now as you want 72a37ba7-2033-47f4-8e7e-69a207406dfb this substring of the vale attribute 
    // then plz apply java split as below 
    String value = "/oauth2/authz/?response_type=code&client_id=localoauth20&redirect_uri=http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state=72a37ba7-2033-47f4-8e7e-69a207406dfb";
    String [] myValue = value.split("=");
    System.out.println(myValue[0]); // will print /oauth2/authz/?response_type
    System.out.println(myValue[1]); // will print code&client_id
    System.out.println(myValue[2]); // will print localoauth20&redirect_uri
    System.out.println(myValue[3]); // will print http%3A%2F%2Fbg-sip-activemq%3A8080%2Fjbpm-console%2Foauth20Callback&state
    System.out.println(myValue[4]); // will print 72a37ba7-2033-47f4-8e7e-69a207406dfb

希望这对您的查询有所帮助

【讨论】:

    【解决方案2】:

    XPATH:

    //input[@id="continueTo"]/@value
    

    它将获取节点input 的值,id 为continueTo。然后需要先用正则表达式处理才能得到最终结果。

    正则表达式:

    `[^=]+$`
    

    $ 表示字符串的结尾。它将获取字符串末尾不是= 的所有内容。

    【讨论】:

    • 但是我在 xpath 上看不到它,您能否发布完整的 xpath,如果 Xpath 具有对属性进行字符串操作的所有逻辑,那会很好,比如拆分字符串、提取第二个值等
    【解决方案3】:

    使用下面的代码:-

        String val = driver.findElement(By.xpath("//input[@id='continueTo']/@value")).getText();
    
        String [] myValue = val.split("&state=");
    
        System.out.println(myValue[1]);
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      相关资源
      最近更新 更多