【问题标题】:Execute Javascript using Selenium or HtmlUnit使用 Selenium 或 HtmlUnit 执行 Javascript
【发布时间】:2015-09-03 21:03:04
【问题描述】:

我需要一点帮助。

我想使用 Java 和 Selenium 或 HtmlUnit 打开一些页面,打开这个页面后,像 Ajax 一样执行 url 并获取 String 响应。

假设一个想打开http://www.somepage.com,当驱动还在这个页面时,执行GET http://www.somepage.com/myAjax/xyz,应该返回JSON。

然后我想获取 JSON 响应并对其进行处理。

你能帮我吗,怎么做?

最好的问候

【问题讨论】:

    标签: selenium htmlunit


    【解决方案1】:
    1. 要注入您自己的 javascript,您可以执行以下操作:
            new WebConnectionWrapper(webClient) {
    
                public WebResponse getResponse(WebRequest request) throws IOException {
                    WebResponse response = super.getResponse(request);
                    if (request.getUrl().toExternalForm().contains("my_url")) {
                        String content = response.getContentAsString("UTF-8");
    
                        // inject the below to the 'content' 
    
                        String tobeInjected = ""
                                + "<script>\n"
                                + "var myOwnVariable;\n"
                                + "var xmlhttp;\n"
                                + "if (window.XMLHttpRequest) {\n"
                                + "  xmlhttp=new XMLHttpRequest();\n"
                                + "}\n"
                                + "else {\n"
                                + "  xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');\n"
                                + "}\n"
                                + "\n"
                                + "xmlhttp.onreadystatechange=function() {\n"
                                + "  if (xmlhttp.readyState==4 && xmlhttp.status==200) {\n"
                                + "    myOwnVariable = xmlhttp.responseText;\n"
                                + "  }\n"
                                + "}\n"
                                + "\n"
                                + "xmlhttp.open('GET', 'http://www.somepage.com/myAjax/xyz', true);\n"
                                + "xmlhttp.send();\n"
                                + "</script>";
    
                        WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),
                                response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
                        response = new WebResponse(data, request, response.getLoadTime());
                    }
                    return response;
                }
            };
    
    1. 检索 javascript 变量的值:
    webClient.waitForBackgroundJavaScript(5_000);
    String value = htmlPage.executeJavaScript("myOwnVariable").toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2013-01-29
      相关资源
      最近更新 更多