2015-10-27 84 views
0

我想访问本地设备的网页。这是该页面的HTML代码的一部分:为什么我无法在phantomJS中加载我的页面?

<div class="form-container"> 
    <h2 class="form-signin-heading">Please Log In</h2> 
    <div class="form-group input-group auth focus"> 
     <label for="user_account" class="visuallyhidden">Username:</label> 
     <span class="input-group-addon"><i class="icon-user"></i></span> 
     <input autofocus="autofocus" class="form-control auth" id="user_account" maxlength="128" name="user[account]" placeholder="Enter User Name" size="128" type="text" /> 
    </div> 
    <div class="form-group input-group auth"> 
     <label for="user_password" class="visuallyhidden">Password:</label> 
     <span class="input-group-addon"><i class="icon-lock"></i></span> 
     <input autocomplete="off" class="form-control auth" id="user_password" maxlength="128" name="user[password]" placeholder="Enter Password" size="128" type="password" /> 
    </div> 
    <input type="hidden" id="window_size" name="window_size"/> 
    <input type="hidden" id="url_hash" name="url_hash"/> 
    <button id="logInButton" class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 
    </div> 

我想输入用户名和密码,然后通过登录按钮登录。该脚本在我更新设备之前已运行。现在我不能让它再次工作。

这是我的脚本:

page.open("https://10.84.163.146/login/login", function(status){ 
    console.log(page.content); 

}); 

page.render('Bild2.png'); 
console.log(page.content); 
page.evaluate(function(){ 
    console.log(document.getElementsByClassName("form-group input-group auth")); 
    console.log(document.getElementById("user_account")); 
    document.getElementsByClassName("form-control auth").value="op"; 

控制台输出是这样的:

/Desktop$ phantomjs --ignore-ssl-errors=true check.js 
<html><head></head><body></body></html> 
[object NodeList] 
null 

所以打印page.content当它是空的,呈现的画面也为空白。但是如果找不到/打开页面,为什么如果找到[object NodeList]而不是user_account元素?

+0

您使用的是什么PhantomJS版本?请注册onConsoleMessage,onError,onResourceError,onResourceTimeout事件([Example](https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js))。也许有错误。 –

+0

我使用1.9,因为2.0不想安装正确。在使用代码时,它显示“无法加载资源(#undefinedURL:https://10.84.163.146/login/login) 错误代码:6.说明:SSL握手失败 状态:失败 ”。但为什么不起作用。我有igone-ssl-errors选项 – Helyx

+0

这可能是因为Poodle。请参阅[PhantomJS未能打开HTTPS站点](http://stackoverflow.com/q/12021578/1816580)。我已经更新了我的答案。 –

回答

0

page.open()是异步的。如果你想要做的事加载的页面上,那么你需要把这些代码到page.open()回调:

page.onConsoleMessage = function(msg){ 
    console.log("remote> " + msg); 
}; 

page.open("https://10.84.163.146/login/login", function(status){ 
    console.log(page.content); 

    page.render('Bild2.png'); 
    console.log(page.content); 
    page.evaluate(function(){ 
     console.log(document.getElementsByClassName("form-group input-group auth")); 
     console.log(document.getElementById("user_account")); 
     document.getElementsByClassName("form-control auth")[0].value="op"; 
    }); 
}); 

getElementsByClassName("form-control auth")返回其不具有value财产的NodeList。你需要先获得一个元素。

因为,你加载一个HTTPS资源,并使用PhantomJS 1.x中,你应该在运行时PhantomJS使用额外的命令行参数:

 
phantomjs --ignore-ssl-errors=true --ssl-protocol=any script.js 

更多信息请参见PhantomJS failing to open HTTPS site

+0

,但它如何找到任何东西,如果它似乎无法正确加载页面(page.content输出为空,图片为空) – Helyx

+0

如果我执行脚本与您的修改控制台中没有任何输出 – Helyx

相关问题