我需要自动将文件上传到客户站点,该站点受登录凭据保护。 现在我有一个非常大的问题,因为登录页面(可能是网站的其余部分......)格式错误。 我该如何处理这些页面?似乎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工作正常!
有办法解决这个问题吗?
答案 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>
可能仍然可以挽救
__utils__.sendAJAX
,casper.page.content
。这基本上是带有标记的about:blank
页面。因此,您需要使用--local-to-remote-url-access=true
标志启动CasperJS。
如果您不受PhantomJS的约束,您可以试用http://slimerjs.org/作为CasperJS的引擎。它使用已安装的Firefox的gecko引擎,可以更好地处理损坏的HTML。它可以通过xvfb以无头模式运行。