为什么我不能在phantomJS中加载我的页面?

时间:2015-10-27 13:32:39

标签: javascript phantomjs

我想访问本地设备的网页。这是该页面的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元素?

1 个答案:

答案 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