waitForSelector Timing Out

时间:2016-09-08 19:52:05

标签: javascript casperjs

我在使用CasperJS时遇到问题。基本上,这是我想要通过的步骤:

  1. 转到loginUrl
  2. 使用正确的用户名和密码填写登录表单
  3. 提交登录表单
  4. 等到页面右侧选择器出现,然后截取页面的屏幕截图。
  5. 这是我的步骤1到3的设置。(我在这里捕获图像以确保我能够登录网站);

    步骤1到3(加上屏幕截图):

    var env = require('system').env;
    var casper = require('casper').create();
    
    
    var loginUrl = env.loginUrl;
    var login = env.login;
    var password = env.password;
    
    
    casper.on('remote.message', function(event) { // log messages from browser
      console.log(event);
    });
    
    
    casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'); // set user agent
    
    
    casper.start(loginUrl); // open the following url
    
    
    casper.then(function() { // login
      this.fill('#form_signin', {username: login, password: password}, true);
    });
    
    casper.wait(2000, function() {
      this.capture('./output/test.png');
    });
    
    
    casper.run();
    

    以上效果很好。捕获的图像正是我所期待的。但是,我不想使用等待 - 相反,我想使用 waitForSelector 。我用上面的等待函数代替:

    casper.waitForSelector('#attendance', function() {
      this.capture('./output/test.png');
    })
    

    不幸的是,这不起作用。起初我可能是因为选择器错了。 但是,当我使用Chrome手动登录网站时,我运行了document.getElementById("出勤率")我得到了预期的元素。

    如果我尝试在页面本身的上下文中搜索选择器,我认为可能会有更好的运气,所以我没有用 waitForSelector 替换等待,而是替换它有了这个:

    function attendanceCheck() {
      return this.evaluate(function() {
        return !!document.getElementById('attendance');
      });
    }
    
    
    casper.waitFor(attendanceCheck, function() {
      this.capture('./output/test.png');
    })
    

    即使使用此设置,我也会暂停,这意味着 attendanceCheck 永远无法找到适合给定选择器的元素,即使在页面上下文中进行评估也是如此。

    有人可以帮我弄清楚我做错了什么吗?我知道我可以登录,而且我知道,一旦整个页面加载,就会有一个ID为"出勤率#34;还有 waitForSelector waitFor的元素无法找到此元素。 (最后,我必须单击此元素,所以我必须能够找到它)。

0 个答案:

没有答案