从Java调用网页上的Javascript

从Java调用网页上的Javascript,java,javascript,html,dom,Java,Javascript,Html,Dom,我的目标是连接到OWA页面(Microsoft Office Outlook Web Access-基本上是一个电子邮件客户端)并登录,然后阅读加载的新页面并查找收件箱数量 要登录,我需要填写用户名和密码字段,并调用某个javascript函数,我知道该函数的名称和标题 我如何: 获取页面的DOM 是否更新DOM以填写输入文本字段 调用Javascript函数 获取我重定向到的页面的新URL 到目前为止,我能够使用以下Java代码连接到网页并加载其页面源代码: /

我的目标是连接到OWA页面(Microsoft Office Outlook Web Access-基本上是一个电子邮件客户端)并登录,然后阅读加载的新页面并查找收件箱数量

要登录,我需要填写用户名和密码字段,并调用某个javascript函数,我知道该函数的名称和标题

我如何:

  • 获取页面的DOM
  • 是否更新DOM以填写输入文本字段
  • 调用Javascript函数
  • 获取我重定向到的页面的新URL
  • 到目前为止,我能够使用以下Java代码连接到网页并加载其页面源代码:

                    // open the connection to the welcome page
                    callback.status("Opening connection...");
                    URLConnection connection = null;
                    try
                    {
                        connection = url.openConnection();
                    }
                    catch(IOException ex)
                    {
                        throw new Exception("I/O Problem while attempting URL connection");
                    }
    
                    connection.setDoInput(true);
    
                    // open input stream to read website
                    callback.status("Opening data stream...");
                    InputStream input = null;
                    try
                    {
                        input = connection.getInputStream();
                    }
                    catch(IOException ex)
                    {
                        throw new Exception("I/O Problem while opening data stream");
                    }
    
                    // read website contents
                    callback.status("Reading site...");
    
                    String content = "";
                    byte[] buffer = new byte[100];
                    int totalBytesRead = 0;
                    int bytesRead = 0;
                    try
                    {
                        while((bytesRead = input.read(buffer)) != -1)
                        {
                            String newContent = new String(buffer, 0, bytesRead);
                            content += newContent;
                        }
                    }
                    catch(IOException ex)
                    {
                        throw new Exception("I/O Problem while reading website");
                    }
    
                    System.out.println(content);
    
    结果是整个页面源代码被输出到控制台-很好。 我还尝试解析页面以获取DOM对象,然后可以按照该对象查找用户名和密码字段:

                    XMLParserConfiguration config = new XML11DTDConfiguration();
                    DOMParser parser = new DOMParser(config);
                    InputSource inputSource = new InputSource(input);
                    inputSource.setByteStream(input);
                    try
                    {
                        parser.parse(inputSource);
                    }
                    catch(SAXParseException ex)
                    {
    
                    }
                    Document document = parser.getDocument();
                    visitNode(document, 0);
    
    但是我得到了一个SAXParseException::6:62:publicId和systemId之间需要空格

    看来这条线是罪魁祸首:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    
    
    

    因此,我可能需要以某种方式更改DOMParser的配置,使其足够宽大,并“原谅”空白要求。

    那么您想像一个无GUI的webbrowser程序一样运行吗?使用,这正是它的广告内容

    HtmlUnit是一款“用于Java程序的无GUI浏览器”。它为HTML文档建模,并提供一个API,允许您调用页面、填写表单、单击链接等。。。就像在“普通”浏览器中一样

    它有相当好的JavaScript支持(不断改进),甚至可以使用非常复杂的AJAX库,根据您想要使用的配置模拟Firefox或Internet Explorer

    它通常用于测试目的或从网站检索信息

    另见:

    我认为您将面临一个非常困难的项目。该Javascript函数预计将在浏览器DOM的上下文中执行,您将很难提供该上下文。找到一种利用Firefox或WebKit服务器端为您运行页面的方法可能会更容易。我已经看过了,但它看起来已经过时了。另外,当它解析OWA的javascript代码时,我会遇到一系列异常——我可以通过禁用javascript来解决这些问题,但这有点自相矛盾。异常包含有关问题原因的信息。忽略它们对我们解释问题的原因没有多大帮助。你知道,一旦理解了原因,解决方案就显而易见了:)我已经在一些javascript网页上尝试了htmlunit。但它不起作用。警告:遇到过时的内容类型:“text/javascript”。