我想访问本地设备的网页。这是该页面的HTML代码的一部分:
{
coaches: [
{ id:1, firstName:'Joe', lastName:'Smith' }
],
players: [
{ id:1, firstName:'Bill', lastName:'Mans' },
{ id:2, firstName:'Zack', lastName:'Dude' }
]
}
我想输入用户名和密码,然后通过登录按钮登录。在更新设备之前,脚本已运行。现在我再也无法恢复工作了。
这是我的剧本:
<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";
因此,在打印page.content时,它是空的,渲染的图片也是空白的。但如果它无法找到/打开页面,为什么要找到[object NodeList]而不是user_account元素?
答案 0 :(得分: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。