CasperJS如何处理格式错误的HTML?

时间:2014-08-12 08:59:45

标签: html casperjs

我需要自动将文件上传到客户站点,该站点受登录凭据保护。 现在我有一个非常大的问题,因为登录页面(可能是网站的其余部分......)格式错误。 我该如何处理这些页面?似乎casperJS无法处理格式错误的HTML

格式错误的HTML示例 (这是网站页面清理了一下但原始问题,如tr或td未关闭等等):

<html>
    <head>
        <title>TEST Login Page</title>
    </head>
<body>
    <div>
        <table>
            <tbody>
                <tr>
                    <td>
                        <table>
                            <tbody>
                                <tr>
                                    <td>
                                        <table>
                                            <tbody>
                                            <tr>
                                                <td>
                                                    <table> 
                                                        <tbody>                                                     
                                                        <form name="loginForm" method="post" action="test.do">
                                                            <tr>                                    
                                                                <input type="username" name="username" size="12" value=""></td>
                                                                <input type="password" name="password" size="12" value=""></td>
                                                            <input type="submit" value="Login" class="submit"></td>
                                                        </tr>
                                                        </form>
                                                    <tr>
                                </tr>                               
                            </tbody>
                        </table>
                    </td>
                    </tr>
                </tbody>
                </table>
                </td>
            </tr>
        </tbody>
        </table>
        </td>
    </tr>
</tbody>
</table>
</div>
</body>
</html>

清理HTML

!DOCTYPE html>
<html>
<head>
  <title>TEST Login Page</title>
</head>
<body>
  <div>
    <table>
      <tbody>
        <tr>
          <td>
            <table>
              <tbody>
                <tr>
                  <td>
                    <table>
                      <tbody>
                        <tr>
                          <td>
                            <form name="loginForm" method="post" action="test.do" id="loginForm">
                                <input type="username" name="username" size="12" value="" />
                                <input type="password" name="password" size="12" value="" />
                                <input type="submit" value="Login" class="submit" />
                            </form>
                          </td>
                        </tr>
                      </tbody>
                    </table>
                  </td>
                </tr>
              </tbody>
            </table>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</body>
</html>

Casper JS示例:

casper.start(serverName, function(){ 
  this.echo(this.getHTML('form[name="loginForm"]'));
});

casper.run();

使用格式错误的代码,没有任何回报,但清理过的一个everityng工作正常!

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果HTML格式不正确,则未定义PhantomJS将如何解析和处理它。 PhantomJS breaks页面完全(样本):

<table>
    <tbody>
        <tr>
            <td>
                <table>
                    <tbody>
                    <tr>
                        <td>
                            <input type="username" name="username" size="12" value=""><input type="password" name="password" size="12" value=""><input type="submit" value="Login" class="submit"><table> 
                                <tbody>                                                     
                                <form name="loginForm" method="post" action="test.do"></form>
                                    <tr>                                    



                                </tr>

                            <tr>
        </tr>                               
    </tbody>
</table>

可能仍然可以挽救
  1. 使用__utils__.sendAJAX
  2. 下载相关网页
  3. 首先使用普通的javascript和字符串操作(这是棘手的部分)和
  4. 来修复它
  5. 然后将此固定字符串分配给casper.page.content
  6. 这基本上是带有标记的about:blank页面。因此,您需要使用--local-to-remote-url-access=true标志启动CasperJS。


    如果您不受PhantomJS的约束,您可以试用http://slimerjs.org/作为CasperJS的引擎。它使用已安装的Firefox的gecko引擎,可以更好地处理损坏的HTML。它可以通过xvfb以无头模式运行。